我正在使用JAVA7。我需要使用泛型來編寫課程,這將對具體的課程起作用。我怎麼寫?Java通用類只接受特定的類類型?
類別名稱:SomeClass.java
它應該只接受類別SomeOtherClass.java
。
我可以寫如下嗎?
public class SomeClass<SomeOtherClass> {
}
謝謝!
我正在使用JAVA7。我需要使用泛型來編寫課程,這將對具體的課程起作用。我怎麼寫?Java通用類只接受特定的類類型?
類別名稱:SomeClass.java
它應該只接受類別SomeOtherClass.java
。
我可以寫如下嗎?
public class SomeClass<SomeOtherClass> {
}
謝謝!
你是什麼意思「接受」只有一個類的類型?從這個問題我猜測你不知道泛型是做什麼的。
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類型,並使用那裏可用的任何方法。
不,你不能像你說的那樣寫。您的符號聲明瞭一個名爲SomeOtherClass
的新類型變量。它與SomeOtherClass
類型無關。
相反聲明一個類型的變量,並給它一個綁定
public class SomeClass<T extends SomeOtherClass> {
現在變量T
類型有一個上限的SomeOtherClass
。
這意味着SomeClass
類型的參數化用途必須提供SomeOtherClass
或其任何子類型的類型參數。
如果唯一有效的參數是'SomeOtherClass',爲什麼要使用泛型呢?直接使用該類。 – Mureinik