内部类是接口的“明智”默认值?

时间:2011-09-02 14:14:52

标签: java coding-style interface inner-classes

我正在扩展现有内部框架的一部分。框架的某些部分使用包含内部类的接口定义。该接口用作注释的参数值,内部类作为默认值提供。界面如下所示:

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 个答案:

答案 0 :(得分:2)

这是最好的做法。还有一些实例,其中静态最终内部类包含一些执行f.e.的静态方法。找到一个特定的实例。

编辑:请记住,接口和内部类是两个完全独立的类型,后者只与前者有一个共同的前缀。