首页 > 解决方案 > 如何使用通用方法查找对象的字段?

问题描述

我有一个带有公共“x”字段的 Cube 对象。我的 Cube 类中有一个 toString 方法,它打印出 x,y,z 字段,但是当我直接访问它时,出现错误 where: field cannot be resolved or is not a field

public <T> void setPosition(T object){
   System.out.println(object);  
   System.out.println(object.x); // error here
}

标签: javagenericsfield

解决方案


我建议定义一个接口来声明多种不同类型将公开的方法。就像是:

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.


推荐阅读