2012-07-06 39 views
3

帶有類型參數的接口有什麼用途?他們真的用了什麼?我的理解是正確的。 比方說,我有這個接口界面類型參數的用法是什麼?

public interface Moveable <Person>{ 
    void move(double x, double z); 
} 

這是否意味着,只有那些類型的人可以使用對象/實現這個?

回答

7

這不是典型的模式,在你的情況下,類型參數沒有做任何事情。這是一個更好的例子。

public interface Movable<T> { 
    T move(); 
} 

現在,你的代碼將返回實施者指定的,而不是你剛纔說的舉動總是返回對象或其他一些更通用類的類型。

編輯:你的界面

public MyMover implements Movable<Truck> { 
    public Truck move(){ 
     return new Truck(); 
    } 
} 

你真的不能限制實施者是某些類型。如果需要,您可以限制它by package。也許抽象類會爲你更好地工作。

+0

我怎樣才能限制使用此接口的其他對象?我應該添加一個上限?像T延伸可比?其中只有實現可比較的類或對象才能夠使用此接口?你能提供一個你創建的界面的例子嗎? – user962206 2012-07-06 04:18:28

+1

@ user962206:閱讀[教程](http://docs.oracle.com/javase/tutorial/java/generics/bounded.html)的時間? – vanza 2012-07-06 04:21:02

+0

@jjathman是正確的。因爲,如果您稍後決定要擴大其使用範圍,那麼在界面中指定類型並不能提供非常可擴展的代碼。你不需要'限制它的使用'必然OP,只是控制通過你的代碼使用它的東西。 – 2012-07-06 04:25:04

1

Does this mean that only objects that are Type Person can use implement this?

不,不完全是,通用在接口使用,如果它是在一個正常的課堂上使用是一樣的。它指定接口將包含/操作的對象類型。

想想你是如何申報ArrayList的。您需要指定ArrayList將包含的對象類型,因爲它以不同方式處理每種類型的對象。

在您聲明的接口中,您所說的實現此接口的類只能保存/處理Person類型的對象。

有關泛型的更多信息,請點擊此鏈接:

Oracle: Generics

相關問題