Có ai biết tại sao bạn có thể tham chiếu phương thức static
trong dòng đầu tiên của hàm tạo bằng cách sử dụng this()
hoặc super()
, nhưng không phải là phương pháp không tĩnh?Tại sao tôi không thể tham chiếu đến một phương thức thể hiện trong khi gọi một constructor một cách rõ ràng?
Hãy xem xét các hoạt động sau:
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;
}
}
Và không làm việc ví dụ sau:
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;
}
}
Nó có thể chỉ là mã mẫu nhưng một mối quan tâm tôi có về mã này là bạn có logic để xây dựng một thể hiện 'A' từ một thể hiện' B' được chôn trong lớp thứ ba 'TestNotWorking'. –
Tôi đồng ý với mối quan tâm của bạn. Lý do tôi làm như sau: Tôi đang sử dụng API của bên thứ ba có khả năng giới hạn trong lớp và lớp học được đánh dấu cuối cùng.Cách duy nhất là sao chép đối tượng gốc và làm việc trên bản sao. Tôi đã sử dụng đối tượng gốc làm tham số cho đối tượng mới của mình. Vì mục đích của ví dụ, tôi đã sửa đổi nó một chút. – Koekiebox
@Koekiebox Tại sao bạn tự hỏi rằng TestNotWorking.getAFromB (bParam) không hoạt động? nó là phương pháp thể hiện. bạn nên tạo đối tượng hoặc sử dụng nó. – gstackoverflow