b***i 发帖数: 3043 | 1 有一个项目,我目前的设计是这样的,
有一个Symbol和其子类Triangle, Point, Segment, ...
还有一个量类Value是generics编程
class Value extends ... {
public boolean equal(Value other){//此处可以改名,因为
不是重载
...
}
@Override
public boolean equal(Object obj){
if (this==obj) return true;
【x】 if (!(obj instanceof Value) return false;
return equal((Value)obj);
}
}
大家看到,【x】表示这一行不能编译,因为Type Eraser。但是如果改成Value>,下
一行又出现提示,要suppress warning。如何才能判断obj是不是同一个类型?然后安
全呼叫知道类型的比较? |
L*******k 发帖数: 42 | 2 如果只是比较type可以把this和obj的runtime class cast 到ParameterizedType 吧 |
n***p 发帖数: 110 | 3 change both Value to Value> |
m****o 发帖数: 182 | 4 没有什么好办法,除非你愿意改用Scala写:用ClassManifest把compile time的类信息
带入到runtime中。 |
b***s 发帖数: 117 | 5 obj.getClass() == Value.class ?
【在 b***i 的大作中提到】 : 有一个项目,我目前的设计是这样的, : 有一个Symbol和其子类Triangle, Point, Segment, ... : 还有一个量类Value是generics编程 : class Value extends ... { : public boolean equal(Value other){//此处可以改名,因为 : 不是重载 : ... : } : @Override : public boolean equal(Object obj){
|