1. ホーム
  2. java

[解決済み] Java 8におけるtypeof

2022-03-02 23:58:36

質問

javascriptで変数のデータ型を確認したい場合、以下のようにします。 typeof 演算子を使用します。

次のスニペットを考えてみましょう。

var c = 'str' ;
console.log(typeof(c)); // string
c = 123 ;
console.log(typeof(c)); // number
c =  {} ;
console.log(typeof(c)) ; // object

で同じ機能を実現したい。 Java 8 . Java には typeof 演算子がありませんが、typeof 演算子には instanceof 演算子で型をチェックします。

System.out.println("str" instanceof String);  // true 

Integer a  = 12 ;
System.out.println(a instanceof Integer);


Float f = 12.3f
System.out.println(f instanceof Float); // true

これ以上のものはないだろう?プラス instanceof はプリミティブ型をサポートしていません。

でのアプローチはあるのでしょうか? java 8 ? 何か関連するアプローチがあれば、教えてください。

どのように解決するのですか?

を使用することができます。 getClass() メソッドを使用して、使用しているオブジェクトの型を取得します。

Object obj = null;
obj = new ArrayList<String>();
System.out.println(obj.getClass());

obj = "dummy";
System.out.println(obj.getClass());

obj = 4;
System.out.println(obj.getClass());

これによって、次のような出力が得られます。

class java.util.ArrayList
class java.lang.String
class java.lang.Integer

ご覧の通り、変数が参照しているオブジェクトの型が表示されます。これは、変数の型と同じではないかもしれません ( Object この場合)。

プリミティブ型については、変数に格納されている型を知るという問題が存在しないため、利用可能な解決策はありません。プリミティブ型の変数には のみ の値は、その型の値です。変数(またはパラメータ)をどこかで定義しなければならないので、その型と保持できる値はすでに分かっているはずです。プリミティブな値には、quot;base" という型はありません。 Object 型は、Javaのすべてのオブジェクトの基本型です。