[英]Java Generic - subtypes check?
如何檢查作為參數傳遞的通用子類型?
例如:
public class A<T> { public T get();}
public class AString extends A<String> {}
public class ADate extends A<Date> {}
public void checkparam(List<? extends A<?>> params) {
///Want to check if params is of type List<AString> or List<ADate> ?
}
可能嗎? 我不了解哪一部分?
這是不可能的,因為這樣的通用類型信息已刪除並且在運行時不可用。 在運行時,只知道checkparam
的參數是List
。
我不認為您可以直接在清單上進行操作。 您可以檢查第一個元素:
if (!params.isEmpty() && params.get(0) instanceof AString) {
// it's List<AString>
}
...
不漂亮,不能在空列表上使用,但應該可以使用。
通過嘗試編譯以下代碼可以清楚地看出這一點:
import java.util.Date;
import java.util.List;
public class A<T> {
private T value;
public T get() {
return value;
}
public void checkparam(List<AString> list) {
}
public void checkparam(List<ADate> list) {
}
}
class AString extends A<String> {}
class ADate extends A<Date> {}
從javac產生以下輸出:
$ javac A.java
A.java:11: name clash: checkparam(java.util.List<AString>) and checkparam(java.util.List<ADate>) have the same erasure
public void checkparam(List<AString> list) {
^
A.java:15: name clash: checkparam(java.util.List<ADate>) and checkparam(java.util.List<AString>) have the same erasure
public void checkparam(List<ADate> list) {
^
2 errors
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.