que - overloading java
¿Qué significa el método "this()"? (8)
Me encontré con este bloque de código, y hay una línea que no dejo de entender el significado o lo que está haciendo.
public Digraph(In in) {
this(in.readInt());
int E = in.readInt();
for (int i = 0; i < E; i++) {
int v = in.readInt();
int w = in.readInt();
addEdge(v, w);
}
}
Entiendo lo que son this.method()
o this.variable
, pero ¿qué es this()
?
Es casi lo mismo
public class Test {
public Test(int i) { /*construct*/ }
public Test(int i, String s){ this(i); /*construct*/ }
}
Este fragmento de código es un constructor.
Esta llamada a this
llama a otro constructor de la misma clase
public App(int input) {
}
public App(String input) {
this(Integer.parseInt(input));
}
En el ejemplo anterior tenemos un constructor que toma un int
y uno que toma un String
. El constructor que toma una String
convierte la String
en una int
y luego delega en el constructor int
.
Tenga en cuenta que una llamada a otro constructor o un constructor de superclase ( super()
) debe ser la primera línea en un constructor.
Tal vez eche un vistazo a this para una explicación más detallada de la sobrecarga del constructor.
Esto es sobrecarga de constructor:
public class Diagraph {
public Diagraph(int n) {
// Constructor code
}
public Digraph(In in) {
this(in.readInt()); // Calls the constructor above.
int E = in.readInt();
for (int i = 0; i < E; i++) {
int v = in.readInt();
int w = in.readInt();
addEdge(v, w);
}
}
}
Puedes decir que este código es un constructor y no un método por la falta de un tipo de devolución. Esto es muy similar a llamar a super()
en la primera línea del constructor para inicializar la clase extendida. Debería llamar a this()
(o cualquier otra sobrecarga de this()
) en la primera línea de su constructor y así evitar las duplicaciones de código de constructor.
También puedes echar un vistazo a esta publicación: Sobrecarga de constructores en Java: mejor práctica
Llamar a this
esencialmente llama a la clase Constructor. Por ejemplo, si está ampliando algo, que junto con add(JComponent)
, podría hacer: this.add(JComponent).
Otro constructor de la clase Digraph con un parámetro int.
Digraph(int param) { /* */ }
Sobrecarga del Constructor:
ex:
public class Test{
Test(){
this(10); // calling constructor with one parameter
System.out.println("This is Default Constructor");
}
Test(int number1){
this(10,20); // calling constructor with two parameter
System.out.println("This is Parametrized Constructor with one argument "+number1);
}
Test(int number1,int number2){
System.out.println("This is Parametrized Constructor with two argument"+number1+" , "+number2);
}
public static void main(String args[]){
Test t = new Test();
// first default constructor,then constructor with 1 parameter , then constructor with 2 parameters will be called
}
}
Usando this () como una función como esa, esencialmente llama al Constructor de la clase. Esto le permite todas las inicializaciones genéricas en un constructor y tiene especializaciones en otros. Entonces, en este fragmento de código, por ejemplo, la llamada a this(in.readInt())
llama al constructor Digraph que tiene un argumento int.
this();
es un constructor que se usa para llamar a otro constructor en una clase, por ejemplo:
class A{
public A(int,int)
{ this(1.3,2.7);-->this will call default constructor
//code
}
public A()
{
//code
}
public A(float,float)
{ this();-->this will call default type constructor
//code
}
}
Nota: no usé this()
constructor en el constructor predeterminado porque conducirá al estado de interbloqueo.
Espero que esto te ayudará:)