【发布时间】:2018-08-07 19:12:04
【问题描述】:
我有一个带有公共“x”字段的 Cube 对象。我的 Cube 类中有一个 toString 方法,它打印出 x、y、z 字段,但是当我直接访问它时,出现错误:字段无法解析或不是字段。
public <T> void setPosition(T object){
System.out.println(object);
System.out.println(object.x); // error here
}
【问题讨论】:
-
T可以是任何 Object,因此编译器不知道x是否是它的一个字段。如果T被声明为扩展某些类型(例如public <T extends Point> ...),并且该类型具有x,那么这将起作用。 -
^ 那 - 换句话说 - 如果你知道你可以期待什么类型,使用 X instanceof Y 来检查它是否是你所期望的然后转换它。
-
嗯,但是说我有多个类都具有相同的字段,所以我知道该字段将在那里(x,y,z),所以不应该有办法能够有一个适用于具有相似字段的多个类的通用方法吗?
-
是的,如果所有这些对象都有一个父对象或实现一个也声明该字段/方法的接口。或者正如 Worthless 所写,使用
instanceof和强制转换。 -
是父母这样做的一个很好的例子吗?