我有一个带有公共'x‘字段的Cube对象。我的Cube类中有一个打印x,y,z字段的toString方法,但是当我直接访问它时,我得到一个错误:无法解析或者不是一个字段字段。
public <T> void setPosition(T object){
System.out.println(object);
System.out.println(object.x); // error here
}
发布于 2018-08-09 05:19:57
我发现我可以利用反射方法访问该字段,并将其强制转换为所需的对象。通过使用带有此字段的抽象类来支持此功能,以便从此对象继承的所有对象都可以使用此函数。
public <T> void setPosition(T object) {
Field xField = object.getClass().getField("x");
Field boxField = object.getClass().getField("boundBox");
float xpos = (float)xField.get(object);
BoundingBox box = (BoundingBox)boxField.get(object);
}
我对批评持开放态度,但这对于我从抽象基类继承的多个类来说工作得很好。使用此方法的原因是让另一个类与这些其他类一起工作,而无需创建多个函数,从而为希望创建自己的继承自抽象类的类的用户提供了灵活性。
发布于 2018-08-08 04:01:17
我建议您定义一个接口来声明您的多个不同类型将公开的方法。类似于:
public interface ValueProducer {
public String getValue();
}
然后,您的Cube
类型将如下所示:
public <T extends ValueProducer> void setPosition (T obj) {
System.out.println(obj);
System.out.println(obj.getValue());
}
然后,您希望使用此方法的任何类型只需实现接口ValueProducer
,并且仍然可以扩展或实现适合其用例的任何其他类型。
或者,您可以完全省略泛型,只需将obj
作为ValueProducer
传入。
发布于 2018-08-08 03:23:15
您的方法不知道什么是T
类型。
但是我们可以说T是一个扩展的类
public class GenericCube {
public String value;
}
现在,我们能够访问value
了,因为我们知道了它
public <T extends GenericCube> void setPosition(T obj){
System.out.println(obj);
System.out.println(obj.value);
}
https://stackoverflow.com/questions/51733868
复制相似问题