我了解这两者的用途和目的 - isInstance是instanceOf的运行时等效。但是,为什么我们需要两种方式?我们为什么不能有一个通用实现instanceof关键字来满足这两种情况?
例如,这是当前使用这些的方式:
1)instanceof
public Collection<String> extract(Collection<?> coll) {
Collection<String> result = new ArrayList<String>();
for (Object obj : coll) {
if (obj instanceof String) {
result.add((String) obj);
}
}
return result;
}
2)isInstance
public <T> Collection<T> extract(Collection<?> coll, Class<T> type) {
Collection<T> result = new ArrayList<T>();
for (Object obj : coll) {
if (type.isInstance(obj)) {
result.add((T) obj);
}
}
return result;
}
所以,我的问题是为什么我们不能有一个通用的 instanceof 操作符实现来满足以上第二个例子?(即为什么它不能在运行时解析类型?)
public <T> Collection<T> extract(Collection<?> coll, Class<T> type) {
Collection<T> result = new ArrayList<T>();
for (Object obj : coll) {
if (obj instanceof type) {
result.add((T) obj);
}
}
return result;
}
isAssignableFrom()
。 - Aquarius Power