2012-08-13 41 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