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()
并据此做出决定。 快乐的编码。     

要回复问题请先登录注册