44

重複の可能性:
(Javaで)オブジェクトのクラスを判別する方法は?
Javaは、オブジェクトがどのクラスであるかを判別します

特定のオブジェクトのオブジェクトタイプを比較するための次のサンプルの不完全なメソッドがあります

public void test(Object value) {

        if (value.getClass() == Integer) {
            System.out.println("This is an Integer");
        }else if(value.getClass() == String){
            System.out.println("This is a String");
        }else if(value.getClass() == Float){
            System.out.println("This is a Float");
        }

}

このメソッドは次のように呼び出すことができます。

test("Test");
test(12);
test(10.5f);

この方法は実際には機能していません。機能させるために私を助けてください

4

4 に答える 4

72

あなたは忘れました.class

if (value.getClass() == Integer.class) {
    System.out.println("This is an Integer");
} 
else if (value.getClass() == String.class) {
    System.out.println("This is a String");
}
else if (value.getClass() == Float.class) {
    System.out.println("This is a Float");
}

この種のコードは通常、オブジェクト指向デザインが不十分であることを示していることに注意してください。

また、オブジェクトのクラスをクラスと比較し、instanceofを使用することは同じではないことに注意してください。例えば:

"foo".getClass() == Object.class

は偽ですが、

"foo" instanceof Object

本当です。

どちらを使用する必要があるかは、要件によって異なります。

于 2012-05-10T09:51:49.110 に答える
26

クラストークンを相互に比較できるため、を使用できますvalue.getClass() == Integer.class。ただし、より単純で標準的な方法は、次を使用することinstanceofです。

    if (value instanceof Integer) {
        System.out.println("This is an Integer");
    } else if(value instanceof String) {
        System.out.println("This is a String");
    } else if(value instanceof Float) {
        System.out.println("This is a Float");
    }

ノート:

  • 2つの違いは、クラストークンを比較すると完全一致のみが検出instanceof Cされ、サブクラスの一致Cも検出されることです。ただし、この場合、リストされているすべてのクラスはfinalであるため、サブクラスはありません。したがってinstanceof、ここではおそらく問題ありません。
  • JB Nizetが述べたように、そのようなチェックはオブジェクト指向デザインではありません。あなたはもっとOOの方法でこの問題を解決することができるかもしれません、例えば

    System.out.println("This is a(n) " + value.getClass().getSimpleName());
    
于 2012-05-10T09:51:31.370 に答える
7

あなたが欲しいinstanceof

if (value instanceof Integer)

これはサブクラスにも当てはまります。これは通常必要なものであり、nullセーフでもあります。まったく同じクラスが本当に必要な場合は、

if (value.getClass() == Integer.class)

また

if (Integer.class.equals(value.getClass())
于 2012-05-10T09:51:58.363 に答える
4

使用するvalue instanceof YourClass

于 2012-05-10T09:51:58.253 に答える