Java泛型从泛型方法返回持有者对象

时间:2012-08-13 17:56:46

标签: java generics

以下内容:

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

我在这里搞砸了什么?

2 个答案:

答案 0 :(得分:2)

需要

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

   } 

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

答案 1 :(得分:2)

我不明白为什么你这么难。你说

  

我想实现方法doSomething返回的版本   参数a返回。

嗯,你可以做到这一点:

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

无需持有人课程。 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;
    }
}