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 に答える