29
A
回答
50
嘗試以下操作:
int i = 20;
float f = 20.2f;
System.out.println(((Object)i).getClass().getName());
System.out.println(((Object)f).getClass().getName());
它會打印:
java.lang.Integer
java.lang.Float
至於instanceof
,你可以使用它的動態對應Class#isInstance
:
Integer.class.isInstance(20); // true
Integer.class.isInstance(20f); // false
Integer.class.isInstance("s"); // false
+0
還沒有還沒試過但這是我在找什麼。謝謝。 – ashley
13
有一個簡單的方式,不需要隱式拳擊,所以你不會感到困惑吐溫原語和他們的包裝。您不能使用isInstance
作爲原始類型 - 例如呼叫Integer.TYPE.isInstance(5)
(Integer.TYPE
相當於int.class
)將返回false
,因爲5
被自動複製到Integer
之前。
最簡單的方式來獲得你想要的東西(注 - 這是在編譯時的原語技術上做了,但它仍然需要論證的評價)是通過超載。請參閱我的ideone paste。
...
public static Class<Integer> typeof(final int expr) {
return Integer.TYPE;
}
public static Class<Long> typeof(final long expr) {
return Long.TYPE;
}
...
這可用於如下,例如:
System.out.println(typeof(500 * 3 - 2)); /* int */
System.out.println(typeof(50 % 3L)); /* long */
這依賴於編譯器的確定表達式的類型和選擇正確的過載的能力。
相關問題
- 1. typedef - 原始類型到原始類型
- 2. 如何正確使用原始類型
- 3. 矢量和原始類型初始化
- 4. 原型中原始類型的行爲
- 5. 與原始類型
- 6. Bash原始類型
- 7. 獲取原始原型對象內給定一個變量存儲在原始原型
- 8. 將原始類型應用到原始類型
- 9. 如何確定WPF DataGrid中的原始類型(使用AutoGenerateColumn時)?
- 10. 找回原始類型的提升變量變量
- 11. 整型爲原始類型
- 12. 原始類變量的算術操作
- 13. Hashtable的原始類型
- 14. 原始類型的一般定義
- 15. Swagger原始類型的定義
- 16. 原始類型不變性和堆棧?
- 17. 獲取原始變量值
- 18. 追加原始HTML變量
- 19. 超載原始變量
- 20. 字符串:JavaScript中的原始類型變量或引用類型變量?
- 21. Boost.Any獲得原始類型
- 22. 比較原始類型
- 23. Objective-C setValue:forKey原始類型
- 24. OCMockito捕獲原始類型?
- 25. MyBatis - 原始類型列表
- 26. 對原始類型雙「
- 27. 沒有類型原始
- 28. 建模DateTime原始類型
- 29. 原始類型雙錯誤
- 30. 對象或原始類型
你在尋找一個代表'int','long'等的類嗎? – dasblinkenlight
不知道它的類型,你不能有一個基本的數據類型。它必須裝入一個'Number'類型以便你不知道它,在這種情況下你可以使用'instanceof'。 – Thor84no
@ Thor84no是的,你可以用反射 – Bohemian