1

私は今日ジェネリックを学び始めましたが、これは私にとって奇妙なことです:

私は一般的な方法を持っています:

  public<T> HashMap<String, T> getAllEntitySameType(T type) {

        System.out.println(type.getClass());
        HashMap<String, T> result = null;

        if(type instanceof Project)
        {
            System.out.println(type.toString());
            System.out.println("Yes, instance of Project;");
        }

        if(type instanceof String)
        {
            System.out.println(type.toString());
            System.out.println("Yes, instance of String;");
        }
        this.getProjects();
        return result;
    }

そして、Tタイプのクラスを簡単に判別できます

    Project<Double> project = new Project<Double>();
    company2.getAllEntitySameType(project);
    company2.getAllEntitySameType("TestString");

出力は次のようになります。

class Project
Yes, instance of Project;
class java.lang.String
TestString
Yes, instance of String;

ジェネリックではインスタンスを使用できないと思いました。私の知識では何かが完全ではありません。ありがとう...

4

1 に答える 1

6

たとえば、オブジェクトの生の型instanceofを確認するために使用できます。Project

if (type instanceof Project)

Projectまたは、不明なタイプの a の適切なジェネリック構文を使用します。

if (type instanceof Project<?>)

しかし、型消去のため、withのようにパラメータ化された型を具体化することはできません:Project<Double>instanceof

if (type instanceof Project<Double>) //compile error

Peter Lawreyが指摘したように、型変数に対してチェックすることもできません。

if (type instanceof T) //compile error
于 2013-01-08T16:42:09.340 に答える