微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

instanceof无法正常工作?

如何解决instanceof无法正常工作?

| 我正在尝试创建一个实现Collection的类,因此它必须具有删除ѭ0的方法,因此我认为我将重复使用已经创建的方法删除通用类型
T
的对象,但是它会引发编译时错误。为什么不行呢? 码
public class ArrayPP<T> implements Collection<T>
{
  public boolean remove(Object o)
  {
    if (o instanceof T)
      remove((T)o,true);
    else
      return false;
    return true;
  }
}
错误
ArrayPP.java:5: unexpected type
found   : T
required: class or array
    if (o instanceof T)
为什么,Java? 我已经解决
if (t.getClass().isinstance(o))
  remove((T)o,true);
else
  return false;
return true;
但是...我的意思是,如果有人编码“
ArrayPP<String> a = new ArrayPP<String>();
”,您知道
T
就是
String
,对吗?那么,为什么在运行时无法看到
o
String
?我的意思是,如果我要执行
a.add(\'c\');
,它将不会编译,因为它知道在这里
ArrayPP
中的
add(T item)
方法将只接受
String
,所以为什么.........     

解决方法

对于删除,您不需要检查类型。如果类型不匹配,它将不存在,并且remove将始终返回false。 如果要动态检查add(T t),则需要将类型存储在字段中。
private final Class<T> tClass;

public boolean add(T t) {
   return tClass.isInstanceof(t) && collection.add(t);
}
您是否在“收藏夹”实用程序中查看了“检查的收藏夹”。它可能会做您想要的。 http://download.oracle.com/javase/6/docs/api/java/util/Collections.htmlcheckedCollection、checkedList、checkedSet、checkedMap下     ,通用参数类型不能使用“ 15”。那是因为在运行时没有保存有关T的信息。 您应该阅读一些有关泛型的教程/文档。通常在大多数教程中都会解释这种情况。     ,T是通用类型参数。泛型类型信息将在运行时删除。因此,您可能无法检查对象是否为T的instanceof。     ,由于类型擦除,不能将generic15 types与泛型类型一起使用-运行时没有
T
。 由于run1ѭ在运行时不存在,ѭ19should应该怎么做?当
o
null
instanceof
应该做什么? 一个棘手的解决方法是使用
getClass()
并据此做出决定。 快乐的编码。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。