在一般方法中使用instanceof

时间:2013-01-08 16:37:40

标签: java generics instanceof

我今天开始学习泛型,但这对我来说有些奇怪:

我有一个通用的方法:

  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;

我认为在泛型中我们不能使用实例。据我所知,有些东西并不完整。感谢...

1 个答案:

答案 0 :(得分:6)

您可以使用instanceof检查对象的原始类型,例如Project

if (type instanceof Project)

或者使用适当的泛型语法来表示某种未知类型的Project

if (type instanceof Project<?>)

但由于reify,您无法type erasure Project<Double>参数化类型instanceof,因为pointed out

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

正如Peter Lawrey {{3}},你也无法检查类型变量:

if (type instanceof T) //compile error