web-dev-qa-db-ja.com

Javaで変数の型をどのように知っていますか?

変数を宣言するとしましょう:

String a = "test";

そして、私はそれがどのタイプであるかを知りたいです、すなわち、出力はJava.lang.Stringであるべきです

122
Miguel Ribeiro
a.getClass().getName()
211
Martin

名前が必要な場合は、Martinの方法を使用してください。特定のクラスのインスタンスかどうかを知りたい場合:

boolean b = a instanceof String

31
Martin Konecny

私は検索エンジンから学びました(私の英語はとても悪いので、コード...)変数の型を取得する方法は? 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
29
Copy_Paste

そこでマーティンの答えを拡大したいと思います...

彼の解決策はかなりいいですが、微調整することができますので、「変数型」はそのように印刷できます。(実際は値型です トピックの詳細 )。とはいえ、「微調整」はこのための強力な言葉かもしれません。とにかく、それは役に立つかもしれません。

彼の解決策は:

a.getClass().getName()

あなたがそれを何かで動作させたいなら、あなたはこれを行うことができます:

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

この場合、プリミティブは単にラッパーでラップされます。その場合、プリミティブのオブジェクトを取得します。

私自身は次のように使用しました:

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

ジェネリックの使用:

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

ヨアヒム・ザウアーが言ったことに同意します。変数がクラス属性でない限り、変数タイプはわかりません(変数タイプ!値クラスではありません!)

実際、私にとっては、a.xxx().yyy()メソッドが正しい答えを与えることはまったく不可能です。なぜなら、このメソッドを呼び出すコンテキストに応じて、まったく同じオブジェクトで答えが異なるからです...

Teehooが言ったように、テストするために定義された型のリストをコンパイルすることがわかっている場合、instanceofを使用できますが、サブクラスがtrueを返すこともできます...

考えられる解決策の1つは、Java.lang.reflect.Fieldの実装からインスピレーションを得て、独自のFieldクラスを作成し、すべてのローカル変数をこのカスタムField実装として宣言することでもあります...値型だけでなく、変数型が必要ですか?

3

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 ...

}
3
epicwhat001

ここには複数のソリューションがあると思います:

  • instance ofが解決策となります。

どうして? Javaでは、すべてのクラスはObjectクラス自体から継承されます。したがって、変数があり、その型を知りたい場合。使用できます

  • System.out.println(((Object)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. FALSE
  2. TRUE

詳細はこちらをご覧ください: プリミティブ変数のプリミティブ型を決定する方法?

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

1
Karoly