3

我的界面层次结构类似于 -

interface Type
{
    Type copy();
};

interface SubType extends Type
{
};

interface SubSubType extends SubType
{
};

还有一个具体的类

public class Concrete implements SubSubType
{
    @Override public Concrete copy() { return new Concrete(); }
}

我希望能够在 Type 上调用 copy() 并取回 Type,在 SubType 上调用 copy() 并取回 SubType 等等。这可以实现吗?可能与泛型?

提前致谢。

4

2 回答 2

5

像这样:

public interface Type { 
  public Type copy();
}

public interface SubType extends Type { 
  public SubType copy();
}

public class Concrete implements Type { 
  @Override
  public Concrete copy() {
    return new Concrete();
  }
}

public class SubConcrete implements SubType {
  @Override
  public SubConcrete copy() {
    return new SubConcrete();
  }
}

public static void main(String[] args) {
  Type    type    = new Concrete();
  SubType subType = new SubConcrete();

  Type    newType    = type.copy();
  SubType newSubType = subType.copy();
}
于 2012-06-29T02:31:47.507 回答
-1

我想你可以去

interface <T extends Type> Type {
   T copy();
}

interface SubType extends Type<SubType> {
  // any extra methods here
}

然后,实现将是

public class Concrete implements SubType {
   public SubType copy() {
      // code here
   }
}

作为记录,在没有复制任何内容时调用方法 copy() 是一个非常糟糕的主意。

编辑:更正下面的代码。为简单起见,SubXXX 接口作为内部类放入,实际上这不太可能有意义。显然我需要切换顺序。呸!

public interface Type<T extends Type<?>> {
   T copy();

   public interface SubType<T extends SubType<?>> extends Type<T> {      
   }

   public interface SubSubType extends SubType<SubSubType> {      
   }
}

并且,实现可能如下所示:

   class Concrete implements SubType<Concrete> {

      @Override
      public Concrete copy() {
         return new Concrete();
      }     
   }

这看起来确实很混乱,我更喜欢(并且刚刚投票支持)@Tim Pote 的答案。

于 2012-06-29T02:48:39.667 回答