![](/img/trans.png)
[英]How does getClass().getName() return class name of the generic type?
[英]How come the .getClass().getName() method works with type int?
有人告訴我,諸如int
之類的原始類型沒有針對它們的方法。 .getClass().getName()
在用於int
類型的變量時如何工作並返回包裝器 class “ Integer
”? 這是自動裝箱的一個例子嗎?
重要提示:這似乎只在將int
變量傳遞給通用 class 時才對我有用。 然后從主方法調用通用 class 中的方法。
我正在使用這個通用的 class:
public class gen< T > {
private T thing;
public gen(T thing) {
this.thing = thing;
}
public String varType() {
return thing.getClass().getName();
}
}
public class Driver() {
int i = 5;
gen g = new gen(i);
System.out.println(g.getType());
}
output為:java.lang.Integer
有人可以解釋這個過程的內部運作嗎?
這樣的事情是行不通的:
public static void main(String args[]) {
int i = 5;
i.getClass().getName();
}
泛型類型參數,例如T
,不能是原語。 對於原始類型,您使用相應的包裝器 class。 更具體地說, T
不能是int
。
在您的情況下,編譯器在new gen(i)
調用中為您自動將int
值裝箱為Integer
。
請參閱:為什么 Java Generics 不支持原始類型?
注意 1: gen
和new gen
是原始的 generics ,因為您省略了 type 參數。 不要使用原始 generics。 此外,如果你還是忽略它們又有什么意義呢?
注 2: Java 命名約定是 class 名稱以大寫字母開頭,因此 class 應命名為Gen
,而不是gen
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.