Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在EclipseKepler中也使用make toString()方法打印继承的字段_Java_Eclipse_Tostring_Eclipse Kepler - Fatal编程技术网

Java 在EclipseKepler中也使用make toString()方法打印继承的字段

Java 在EclipseKepler中也使用make toString()方法打印继承的字段,java,eclipse,tostring,eclipse-kepler,Java,Eclipse,Tostring,Eclipse Kepler,我想为扩展另一个类的类生成toString()方法。但在generate toString()对话框中,继承字段没有复选框(见下图) 这里有什么问题?如果出现以下情况,继承字段选项将变为: 您正在使用可继承字段扩展类,即public、protected(或在同一个包中受保护的包) 当光标位于子类中时,您将在上下文中生成toString方法,以右键单击 后者可能令人困惑:决定应该为哪个类生成toString(等)方法的不是右键单击的位置,而是实际光标所在的位置 您必须在超类中编写一个toSt

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


这里有什么问题?

如果出现以下情况,
继承字段
选项将变为:

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

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

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


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

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();
公共字符串toString(){
StringBuilder toReturn=新的StringBuilder(“\r\n-----------------------\r\n”);
c类=this.getClass();
toReturn.append(c.getName()).append(“\r\n”);
方法[]方法=c.getMethods();
用于(方法:方法){
if(method.getName().startsWith(“get”)&&!method.getName().equals(“getClass”)){
Object obj=新字符串(“无值”);
试一试{
obj=method.invoke(this,(Object[])null);
}捕获(可丢弃的e){
}
toReturn.append(method.getName()).append(“->”).append(obj.append(“\r\n”);
}
}
toReturn.append(“--------------\r\n”);
return toReturn.toString();

在库中考虑使用RealOuttoStult方法,而不是为每个类实现自己的<代码> toStase方法。您可以这样使用它:

public String toString() {
    ToStringBuilder.reflectionToString(this)
}
它将根据类中的所有字段(包括任何超类中的字段)动态生成一个
字符串


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

我忘了对它们进行保护。。谢谢@Mena;)一个非常好的toString()方法+1对于使用ReflectionTanks man,我将考虑将Apache Commons库添加到我的项目中;)+1.