¿Alguien sabe por qué puede hacer referencia a un método static
en la primera línea del constructor usando this()
o super()
, pero no es un método no estático?¿Por qué no puedo hacer referencia a un método de instancia mientras invoco explícitamente un constructor?
Considérese el siguiente trabajo:
public class TestWorking{
private A a = null;
public TestWorking(A aParam){
this.a = aParam;
}
public TestWorking(B bParam)
{
this(TestWorking.getAFromB(bParam));
}
//It works because its marked static.
private static A getAFromB(B param){
A a = new A();
a.setName(param.getName());
return a;
}
}
Y el siguiente ejemplo no laborable:
public class TestNotWorking{
private A a = null;
public TestNotWorking(A aParam){
this.a = aParam;
}
public TestNotWorking(B bParam)
{
this(this.getAFromB(bParam));
}
//This does not work. WHY???
private A getAFromB(B param){
A a = new A();
a.setName(param.getName());
return a;
}
}
Podría ser solo el código de muestra, pero una preocupación que tendría sobre este código es que tienes lógica para construir una instancia 'A' de una instancia' B' enterrada en una tercera clase 'TestNotWorking'. –
Estoy de acuerdo con su preocupación. La razón por la que lo hago así es la siguiente: estoy usando una API de terceros que tiene capacidad limitada en una clase y la clase está marcada como final.La única forma era clonar el objeto original y trabajar en la copia. Usé el objeto original como el parámetro para mi nuevo objeto. Para el propósito del ejemplo lo modifiqué un poco. – Koekiebox
@Koekiebox ¿Por qué te preguntas que TestNotWorking.getAFromB (bParam) no funciona? es un método de instancia. deberías crear un objeto o usar esto. – gstackoverflow