変数を宣言するとしましょう:
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()
この場合、プリミティブは単にラッパーでラップされます。その場合、プリミティブのオブジェクトを取得します。
私自身は次のように使用しました:
private static String nameOf(Object o) {
return o.getClass().getSimpleName();
}
ジェネリックの使用:
public static <T> String nameOf(T o) {
return o.getClass().getSimpleName();
}
ヨアヒム・ザウアーが言ったことに同意します。変数がクラス属性でない限り、変数タイプはわかりません(変数タイプ!値クラスではありません!)
実際、私にとっては、a.xxx().yyy()
メソッドが正しい答えを与えることはまったく不可能です。なぜなら、このメソッドを呼び出すコンテキストに応じて、まったく同じオブジェクトで答えが異なるからです...
Teehooが言ったように、テストするために定義された型のリストをコンパイルすることがわかっている場合、instanceofを使用できますが、サブクラスがtrueを返すこともできます...
考えられる解決策の1つは、Java.lang.reflect.Field
の実装からインスピレーションを得て、独自のField
クラスを作成し、すべてのローカル変数をこのカスタムField
実装として宣言することでもあります...値型だけでなく、変数型が必要ですか?
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 ...
}
ここには複数のソリューションがあると思います:
どうして? Javaでは、すべてのクラスはObjectクラス自体から継承されます。したがって、変数があり、その型を知りたい場合。使用できます
または
または
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);
}
これにより、次のことがわかります。
詳細はこちらをご覧ください: プリミティブ変数のプリミティブ型を決定する方法?
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