3

以下では:

public interface SomeInteface<A, B> {  
    public B doSomething(A a);  
} 

doSomethingメソッドがパラメータを返すバージョンを実装したいと思いますa。私はクラス
を試しました。Holder

class Holder<A> {  
     public A value;  
     public(A a){this.value = a;}  
}

と戻りHolderます。ただし、これを実行SomeInterfaceできるように、の実装クラスを定義する方法がわかりません。

以下はコンパイルすらしません:

public class SomeImplementation<X> implements SomeInterface<T> {  

  private class Holder<A> {  
    public A value;  

    public class Holder<A>{  
      public A value;  
      public(A a){this.value = a;}  
    } 
  }   

  class Implementation<A, Holder<A>> implements SomeInterface<A, Holder<A>>{    
    public Holder<A> doSomething(A a){  
      //do stuff      
      return new Holder(a);  
    }   
  }      
}       

私はここで何を台無しにしていますか?

4

2 に答える 2

2

それはする必要があります

class Implementation<A> implements SomeInteface<A, Holder<A>>{    
          public Holder<A> doSomething(A a){  
              //do stuff  
              return new Holder<A>(a);  
          }     

   } 

クラス名では、総称変数とその制約を定義します。ホルダー変数は必要ありません。

于 2012-08-13T18:05:22.490 に答える
2

なぜそんなに難しくするのか分かりません。あなたは言う

doSomethingメソッドがパラメータを返すバージョンを実装したいと思いますa

まあ、あなたはまさにそれを行うことができます:

public class SomeImplementation<A> implements SomeInterface<A, A> {
    public A doSomething(A a) {
        // do stuff
        return a;
    }
}

ホルダークラスは必要ありません。インターフェイスSomeInterfaceは、型パラメーターに制約を課さないため、同じにできない理由はありません。

または、AがBを拡張する2つの異なるタイプAおよびBで実装をパラメーター化できるようにすることもできます(場合によっては便利です)。

public class SomeImplementation<A extends B, B> implements SomeInterface<A, B> {
    public B doSomething(A a) {
        // do stuff
        return a;
    }
}
于 2012-08-14T00:22:08.770 に答える