Czy ktoś wie, dlaczego można odwołać się do metody static
w pierwszym wierszu konstruktora przy użyciu this()
lub super()
, ale nie jest metodą niestatyczną?Dlaczego nie mogę odwołać się do metody instancji podczas jawnego wywoływania konstruktora?
Rozważmy następujący robocza:
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;
}
}
i następujący nieprodukcyjnym przykład:
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;
}
}
Może to być po prostu przykładowy kod, ale niepokojący bym o tym kodzie był, że masz logikę do skonstruowania instancji 'A' z instancji' B' ukrytej w trzeciej klasie 'TestNotWorking'. –
Zgadzam się z twoją troską. Powód, dla którego robię to w następujący sposób: Używam API innej firmy, który ma ograniczone możliwości w klasie, a klasa jest oznaczona jako ostateczna.Jedynym sposobem było sklonowanie oryginalnego obiektu i praca nad kopią. Użyłem oryginalnego obiektu jako parametru dla mojego nowego obiektu. Na potrzeby przykładu trochę go zmodyfikowałem. – Koekiebox
@Koekiebox Dlaczego zastanawiasz się, że TestNotWorking.getAFromB (bParam) nie działa? to jest metoda instancji. powinieneś stworzyć obiekt lub użyć tego. – gstackoverflow