Đây là một bác bỏ các câu trả lời @ irreputable của:
public class B {
public static A getA(){ return null; }
}
B.getA().blah(); //works!
It "công trình", nhưng có lẽ không phải theo nghĩa mà bạn mong đợi, và chắc chắn không phải một cách hữu ích. Hãy phá vỡ này xuống thành hai phần:
A a = B.getA();
a.blah();
Bản tuyên bố đầu tiên được trả lại một (null trong trường hợp này) thể hiện của A
, và báo cáo kết quả thứ hai là bỏ qua ví dụ đó và gọi A.blah()
. Vì vậy, các báo cáo này là thực sự tương đương với
B.getA();
A.blah();
hoặc (cho rằng getA()
là tác dụng phụ phí), chỉ đơn giản
A.blah();
Và đây là một ví dụ minh họa này rõ ràng hơn:
public class A {
public static void blah() { System.err.println("I'm an A"); }
}
public class SubA extends A {
public static void blah() { System.err.println("I'm a SubA"); }
}
public class B {
public static A getA(){ return new SubA(); }
}
B.getA().blah(); //prints "I'm an A".
... và điều này (tôi hy vọng) minh họa tại sao phương pháp này không giải quyết được vấn đề của OP.
Nguồn
2009-12-20 05:49:22
hoặc đọc http://gbracha.blogspot.com/2008/02/cutting-out-static.html hoặc tìm hiểu C và sử dụng con trỏ hàm. –
Không phải là một câu trả lời như vậy nhưng ... Scala sử dụng các đối tượng singleton thay cho các phương pháp tĩnh (mà thực sự không phải là rất hướng đối tượng). Nếu bạn đã sử dụng Scala sau đó bạn rất nhiều * có thể * làm điều này loại –