Annoying constructor
- Bez korzystania z mechanizmu refleksji, uzupełnij metodę
makeA()tak, aby po poprawnym uruchomieniu poniższego kodu, na konsoli pojawił się napis:
It works!
public class A {
public A() {
throw new RuntimeException();
}
public static A makeA() {
// some code here
}
public void echo() {
System.out.println("It works!");
}
public static void main(String[] args) {
A.makeA().echo();
}
}
Nie wiem czy to się liczy:
public static A makeA() { System.out.println("It works!"); return null; }Prawie… Chodziło o to, aby pojawił się tylko napis, bez wyjątku. Rozwiązanie jest nieco trudniejsze, dlatego je zamieszczam:
public static A makeA() { final AtomicReference<A> ref = new AtomicReference<A>(); try { new A() { protected void finalize() throws Throwable { ref.set(this); } }; } catch (RuntimeException e) { // ignore } while (ref.get() == null) { System.gc(); } return ref.get(); }Nieźle, nie wpadłbym na to żeby wskrzesić ten obiekt.