繁体   English   中英

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

[英]Java generics return holder object from a generic method

在下面的:

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

我在这里搞砸了什么?

它需要

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

   } 

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

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

我想实现一个版本,其中方法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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM