2012-08-13 45 views
3

返回持有者对象在以下几点:Java泛型从一个普通的方法

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

什么我搞乱了这里?

+0

什么是编译错误? – unholysampler 2012-08-13 18:00:33

+2

为什么你在另一个Holder类中有Holder内部类?这些类添加到代码中是什么?你有没有理由不能使用泛型类? – RNJ 2012-08-13 18:00:45

+0

@unholysampler:Eclipse在'class Implementation中显示红色的问号'>' – Cratylus 2012-08-13 18:01:34

回答

2

它需要

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

    } 

在您定义的通用变量及其约束的类名。你不需要Holder变量。

+0

1)你使用'Holder'作为原始类型。它应该是'新Holder (a)'2)“你也可以......”不编译 – newacct 2012-08-13 18:57:56

+0

是的,你是对的,我编辑了这篇文章。 – Stephan 2012-08-13 19:39:43

+0

为什么要使用Holder类呢?看到我的答案。 – herman 2012-08-14 00:29:29

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; 
    } 
} 
+0

所以'SomeInterface '与'SomeInterface '是一样的吗? – Cratylus 2012-08-14 09:18:57

+0

这是与不同类型参数相同的接口。 – herman 2012-08-14 09:26:05

+0

因此,原始声明为'SomeInteface '这一事实不会对实现类声明施加任何限制吗?可能是'Implementation '或'Implementation '或'Implementation '或'Implementation '? – Cratylus 2012-08-14 09:35:23