我正在尝试创建一个实现 Collection 的类,因此它必须具有删除 的方法Object
,所以我想我只是重用我已经创建的方法来删除泛型类型的对象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)
为什么,爪哇?
我已经解决了
if (t.getClass().isInstance(o))
remove((T)o, true);
else
return false;
return true;
但是......我的意思是如果有人编码“ ArrayPP<String> a = new ArrayPP<String>();
”,你知道那T
是String
,对吧?那么为什么在运行时看不到是否o
是 a String
?我的意思是,如果我这样做a.add('c');
,它不会编译,因为它知道,这里的add(T item)
方法ArrayPP
只会接受String
s,所以为什么......呃......