首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用泛型方法查找对象的字段?

如何使用泛型方法查找对象的字段?
EN

Stack Overflow用户
提问于 2018-08-08 03:12:04
回答 3查看 167关注 0票数 0

我有一个带有公共'x‘字段的Cube对象。我的Cube类中有一个打印x,y,z字段的toString方法,但是当我直接访问它时,我得到一个错误:无法解析或者不是一个字段字段。

代码语言:javascript
复制
public <T> void setPosition(T object){
   System.out.println(object);  
   System.out.println(object.x); // error here
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-09 05:19:57

我发现我可以利用反射方法访问该字段,并将其强制转换为所需的对象。通过使用带有此字段的抽象类来支持此功能,以便从此对象继承的所有对象都可以使用此函数。

代码语言:javascript
复制
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);
}

我对批评持开放态度,但这对于我从抽象基类继承的多个类来说工作得很好。使用此方法的原因是让另一个类与这些其他类一起工作,而无需创建多个函数,从而为希望创建自己的继承自抽象类的类的用户提供了灵活性。

票数 -1
EN

Stack Overflow用户

发布于 2018-08-08 04:01:17

我建议您定义一个接口来声明您的多个不同类型将公开的方法。类似于:

代码语言:javascript
复制
public interface ValueProducer {
  public String getValue();
}

然后,您的Cube类型将如下所示:

代码语言:javascript
复制
public <T extends ValueProducer> void setPosition (T obj) {
   System.out.println(obj);  
   System.out.println(obj.getValue());
}

然后,您希望使用此方法的任何类型只需实现接口ValueProducer,并且仍然可以扩展或实现适合其用例的任何其他类型。

或者,您可以完全省略泛型,只需将obj作为ValueProducer传入。

票数 3
EN

Stack Overflow用户

发布于 2018-08-08 03:23:15

您的方法不知道什么是T类型。

但是我们可以说T是一个扩展的类

代码语言:javascript
复制
public class GenericCube {
    public String value;
    }

现在,我们能够访问value了,因为我们知道了它

代码语言:javascript
复制
public <T extends GenericCube> void setPosition(T obj){
    System.out.println(obj);
    System.out.println(obj.value);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51733868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档