使用toString()方法在Eclipse Kepler中打印继承的字段

时间:2015-06-29 10:50:40

标签: java eclipse tostring eclipse-kepler

我想为扩展另一个的类生成toString()方法。但是在生成toString()对话框中,没有用于继承字段的复选框(参见下图)

enter image description here

这里的问题是什么?

4 个答案:

答案 0 :(得分:6)

Inherited fields选项如果出现:

  • 您正在使用可继承字段扩展一个类,即publicprotected(或在同一个包中保护包)
  • 当您的光标位于子类中时右键单击正在生成toString方法

后者可能令人困惑:它不是您右键单击的位置,而是您的实际光标所在的位置,它决定了应该生成toString(等)方法的类。

答案 1 :(得分:3)

您必须在超类中编写toString()方法,然后您需要选择继承的方法并在那里选择toString()

enter image description here

答案 2 :(得分:2)

迟到了,但考虑在ToStringBuilder class in the Apache Commons库中使用reflectionToString方法,而不是为每个类实现自己的toString方法。您可以像这样使用它:

public String toString() {
    ToStringBuilder.reflectionToString(this)
}

它会根据您班级中的所有字段动态生成String,包括任何超类中的字段。

如果您想要某些情况下的不同行为(不包括某些字段,不包括继承的字段等),您还可以稍微调整输出。

答案 3 :(得分:1)

我知道这有点偏离主题,但有人可能更喜欢以下代码:

public String toString() {
   StringBuilder toReturn = new StringBuilder("\r\n-------------\r\n");
   Class<?> c = this.getClass();
   toReturn.append(c.getName()).append("\r\n");
   Method[] methods = c.getMethods();
   for (Method method : methods) {
     if (method.getName().startsWith("get") && !method.getName().equals("getClass")) {
       Object obj = new String("no value");
       try {
         obj = method.invoke(this, (Object[]) null);
       } catch (Throwable e) {
       }
       toReturn.append(method.getName()).append(" -> ").append(obj).append("\r\n");
     }
   }
   toReturn.append("-------------\r\n");
   return toReturn.toString();

}