【问题标题】:instanceof for template types in java [duplicate]java中模板类型的instanceof [重复]
【发布时间】:2014-02-05 12:33:48
【问题描述】:

我如何确定一个对象是否是泛型类的参数化类型的实例,例如ArrayList<String>?我试过了:

if(obj instanceof ArrayList<String>)

但由于编译器错误而失败!

【问题讨论】:

    标签: java templates instanceof


    【解决方案1】:

    简而言之,由于类型擦除,您不能/不应该这样做。 参数化类型仅在编译时存在,而不是在运行时存在。因此,您无法在运行时通过泛型和参数化类型来确保类型安全。它们的存在是为了确保编程时的类型安全,但是在程序运行时所有此类类型信息都已消失,因为类型已被替换视情况而定,剩下的是非参数化的正常类。充其量,您可以执行以下操作:

    obj instanceof ArrayList
    

    检查obj 是否是ArrayList 的实例并且:

    obj.get(0) instanceof String
    

    检查ArrayList中存储的对象是否为String的实例。当然,您可能要先检查是否有任何元素。

    或者,您可以使用反射(例如参见 ParametrizedType 接口中的 getActualTypeArguments())。

    【讨论】:

    【解决方案2】:

    因为在 java 中运行时不会有任何泛型。所以编译器不允许这种逻辑。

    【讨论】:

      猜你喜欢
      • 2019-08-29
      • 2012-07-24
      • 2011-06-27
      • 1970-01-01
      • 2016-05-07
      • 2010-12-22
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      相关资源
      最近更新 更多