Home > Java Puzzle > Annoying constructor

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();
	}
}
  1. GalleanV
    8 sierpnia, 2012 at 11:38 | #1

    Nie wiem czy to się liczy:

    	public static A makeA() {
    		System.out.println("It works!");
    		return null;
    	}
    
    • 8 sierpnia, 2012 at 20:06 | #2

      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();
      }
      
      • GalleanV
        9 sierpnia, 2012 at 07:50 | #3

        Nieźle, nie wpadłbym na to żeby wskrzesić ten obiekt.

  1. Brak jeszcze trackbacków