понедельник, 28 января 2008 г.

Java Puzzle 69: Fade to Black

Допустим, что у вас нет возможности менять классы X и C из предыдущей головоломки. Можете ли вы, не используя reflection, получить значение поля Z в классе X.Y?

Оказывается можно ссылаться на перекрытое имя типа. Просто надо использовать это имя в таком синтаксическом контексте, где разрешено использовать тип, но нельзя использовать переменную. Есть много способов решить эту задачу:

public class FadeToBlack1 {
    public static void main(String args []) {
        System.out.println(((X.Y) null).Z)
    }
}
public class FadeToBlack2 {
    static class XY extends X.Y {
    }
    public static void main(String args []) {
        System.out.println(XY.Z)
    }
}
public class FadeToBlack3 { // for Java 5 and later
    public static <T extends X.Y> void main(String args []) {
        System.out.println(T.Z)
    }
}

Комментариев нет:

Отправить комментарий