Внутренний класс как "разумный" по умолчанию для интерфейса? - PullRequest
2 голосов
/ 02 сентября 2011

Я расширяю часть существующей внутренней структуры. Некоторая часть каркаса использует определение интерфейса, которое содержит внутренний класс. Интерфейс используется в качестве значения параметра для аннотации, а внутренний класс предоставляется в качестве значения по умолчанию. Интерфейс выглядит так:

public interface Adapter<X,Y> {

    static final class IDENTITY implements Adapter<Object, Object> {
        @Override
        public Object transform(Object x) {
            return x;
        }
        @Override
        public Object inverse(Object y) {
            return y;
        }       
    }

    public Y transform(X x);
    public X inverse(y y);
}

И это использование:

public @interface Adapt {
    Class<? extends Adapter<?, ?>> with() default Adapter.IDENTITY.class;
}

Хотя использование выглядит аккуратно, эта конструкция, кажется, идет вразрез с концепцией «контракта» интерфейса Java и может быть нелогичной для следующего разработчика, который имеет дело с кодом.

Какова будет лучшая практика в этом случае?

1 Ответ

2 голосов
/ 02 сентября 2011

Это лучшая практика.Существуют также случаи, когда статический конечный внутренний класс содержит некоторые статические методы, которые обнаруживают конкретный экземпляр.

Редактирование: имейте в виду, что интерфейс и внутренний класс - это два совершенно разных типа, последний просто имеетобщий префикс с первым.

...