Это опровержение @ irreputable отвечают:
public class B {
public static A getA(){ return null; }
}
B.getA().blah(); //works!
Он «работает», но, вероятно, не в том смысле, что вы ожидаете, и, конечно, не полезным способом. Давайте разберем это на две части:
A a = B.getA();
a.blah();
Первое утверждение возвращает (нуль в данном случае) экземпляр A
, а второе утверждение игнорирует этот экземпляр и вызов A.blah()
. Таким образом, эти утверждения фактически эквивалентны
B.getA();
A.blah();
или (при условии, что getA()
является побочным эффектом бесплатно), просто
A.blah();
А вот пример, который иллюстрирует это более ясно:
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".
... и это (я надеюсь) иллюстрирует, почему этот подход не решает проблему OP.
либо прочитайте http://gbracha.blogspot.com/2008/02/cutting-out-static.html, либо изучите C и используйте указатели на функции. –
Не ответ как таковой, но ... Scala использует одиночные объекты вместо статических методов (которые на самом деле не очень объектно-ориентированные). Если бы вы использовали Scala, то вы очень * могли бы делать такие вещи –