Я расширяю часть существующей внутренней структуры. Некоторая часть каркаса использует определение интерфейса, которое содержит внутренний класс. Интерфейс используется в качестве значения параметра для аннотации, а внутренний класс предоставляется в качестве значения по умолчанию. Интерфейс выглядит так:
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 и может быть нелогичной для следующего разработчика, который имеет дело с кодом.
Какова будет лучшая практика в этом случае?