簡體   English   中英

你怎么知道java中的變量類型?

[英]How do you know a variable type in java?

假設我聲明了一個變量:

String a = "test";

我想知道它是什么類型,即輸出應該是java.lang.String我該怎么做?

a.getClass().getName()

如果您想要名稱,請使用Martin的方法。 如果你想知道它是否是某個類的實例:

boolean b = a instanceof String

我從搜索引擎學到了(我的英語非常糟糕,所以代碼......)如何獲取變量的類型? UPS :

String str = "test";
String type = str.getClass().getName();
value: type = java.lang.String

這個方法:

str.getClass().getSimpleName();
value:String

現在示例:

Object o = 1;
o.getClass().getSimpleName();
value:Integer

我想擴展馬丁在那里的答案......

他的解決方案相當不錯,但它可以調整,所以任何“變量類型”都可以這樣打印。(它實際上是值類型, 更多關於主題 )。 也就是說,“調整”可能是一個強有力的詞。 無論如何,它可能會有所幫助。

他的解決方案是:

a.getClass().getName()

如果你想讓它與任何東西一起工作,你可以這樣做:

((Object) myVar).getClass().getName()
//OR
((Object) myInt).getClass().getSimpleName()

在這種情況下,原語將簡單地包裝在Wrapper中。 在這種情況下,您將獲得基元的Object。

我自己就像這樣使用它:

private static String nameOf(Object o) {
    return o.getClass().getSimpleName();
}

使用泛型:

public static <T> String nameOf(T o) {
    return o.getClass().getSimpleName();
}

使用java的運算符重載功能

class Test {

    void printType(String x) {
        System.out.print("String");
    }

    void printType(int x) {     
        System.out.print("Int");
    }

    // same goes on with boolean,double,float,object ...

}

我同意Joachim Sauer所說的,不可能知道(變量類型!不是值類型!),除非你的變量是一個類屬性(你必須檢索類字段,按名稱獲取正確的字段......)

實際上對我來說,根據你調用這個方法的上下文,任何a.xxx().yyy()方法都給你正確答案是完全不可能的,因為答案在完全相同的對象上是不同的...

正如teehoo所說,如果您在編譯時知道要測試的已定義類型列表,您可以使用instanceof但是您也將獲得返回true的子類...

一種可能的解決方案也是激發自己從java.lang.reflect.Field的實現並創建自己的Field類,然后將所有局部變量聲明為這個自定義Field實現......但你最好找到另一個解決方案,我真的好奇為什么你需要變量類型,而不僅僅是值類型?

我想我們有多個解決方案:

  • 實例可能是一個解決方案。

為什么? 在Java中,每個類都繼承自Object類本身。 所以如果你有一個變量,你想知道它的類型。 您可以使用

  • 的System.out.println(((對象)F).getClass()的getName());

要么

  • Integer.class.isInstance(1985); //給出了真實

要么

  • isPrimitive()

     public static void main(String[] args) { ClassDemo classOne = new ClassDemo(); Class classOneClass = classOne(); int i = 5; Class iClass = int.class; // checking for primitive type boolean retval1 = classOneClass.isPrimitive(); System.out.println("classOneClass is primitive type? = " + retval1); // checking for primitive type? boolean retval2 = iClass.isPrimitive(); System.out.println("iClass is primitive type? = " + retval2); } 

這會給我們:

  1. 真正

在這里了解更多: 如何確定原始變量的原始類型?

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

http://docs.oracle.com/cd/E26806_01/wlp.1034/e14255/com/bea/p13n/expression/operator/Instanceof.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM