2014-03-05 50 views
0

我正在使用JAVA7。我需要使用泛型來編寫課程,這將對具體的課程起作用。我怎麼寫?Java通用類只接受特定的類類型?

類別名稱:SomeClass.java 它應該只接受類別SomeOtherClass.java

我可以寫如下嗎?

public class SomeClass<SomeOtherClass> { 


} 

謝謝!

+1

如果唯一有效的參數是'SomeOtherClass',爲什麼要使用泛型呢?直接使用該類。 – Mureinik

回答

0

你是什麼意思「接受」只有一個類的類型?從這個問題我猜測你不知道泛型是做什麼的。

public class SomeClass<T> { 
    private T it; 

    public T getIt() { 
     return it; 
    } 

    public void setIt(T it) { 
     this.it = it; 
    } 
} 

public static void main(String...args) { 
    SomeClass<String> someClass = new SomeClass<String>(); 
    someClass.setIt("this is it!"); 
    System.out.println(someClass.getIt()); 
} 

在這個例子中的泛型使您(開發人員編寫的主要方法)來指定什麼類型的T是使你的代碼更清潔,更安全,因爲編譯器可以檢查你確實使用你所定義的類型。如果你想嘗試:

someClass.setIt(5); 

這會給編譯器錯誤,因爲你將它定義爲一個字符串。

在這方面根本沒有意義只定義一個特定的類。你可以是這樣的:

public class SomeClass<T extends SomeOtherClass> 

,使您能夠說,開發人員必須將t定義爲SomeOtherClass的延伸。這意味着當在SomeClass中使用T時,你(和編譯器)可以認爲它至少是SomeOtherClass類型,並使用那裏可用的任何方法。

2

不,你不能像你說的那樣寫。您的符號聲明瞭一個名爲SomeOtherClass的新類型變量。它與SomeOtherClass類型無關。

相反聲明一個類型的變量,並給它一個綁定

public class SomeClass<T extends SomeOtherClass> { 

現在變量T類型有一個上限的SomeOtherClass

這意味着SomeClass類型的參數化用途必須提供SomeOtherClass或其任何子類型的類型參數。

相關問題