Java 在EclipseKepler中也使用make toString()方法打印继承的字段
我想为扩展另一个类的类生成toString()方法。但在generate toString()对话框中,继承字段没有复选框(见下图)Java 在EclipseKepler中也使用make toString()方法打印继承的字段,java,eclipse,tostring,eclipse-kepler,Java,Eclipse,Tostring,Eclipse Kepler,我想为扩展另一个类的类生成toString()方法。但在generate toString()对话框中,继承字段没有复选框(见下图) 这里有什么问题?如果出现以下情况,继承字段选项将变为: 您正在使用可继承字段扩展类,即public、protected(或在同一个包中受保护的包) 当光标位于子类中时,您将在上下文中生成toString方法,以右键单击 后者可能令人困惑:决定应该为哪个类生成toString(等)方法的不是右键单击的位置,而是实际光标所在的位置 您必须在超类中编写一个toSt
这里有什么问题?如果出现以下情况,
继承字段
选项将变为:
- 您正在使用可继承字段扩展类,即
、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();
在库中考虑使用
public String toString() {
ToStringBuilder.reflectionToString(this)
}
它将根据类中的所有字段(包括任何超类中的字段)动态生成一个字符串
如果您希望在某些情况下(不包括某些字段,不包括继承的字段等)有不同的行为,您也可以稍微调整输出。我忘了对它们进行保护。。谢谢@Mena;)一个非常好的toString()方法+1对于使用ReflectionTanks man,我将考虑将Apache Commons库添加到我的项目中;)+1.