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);  
          }     

   } 

在类名中定义泛型变量及其约束。您不需要 Holder 变量。

于 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;
    }
}

不需要 Holder 类。SomeInterface 接口对类型参数没有任何限制,所以没有理由不一样。

或者,您可以允许您的实现使用两种不同的类型 A 和 B 进行参数化,其中 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 回答