I want to generate toString() method for a class extending an other one. But in generate toString() dialog, there is no checkbox for inherited fields (see picture below)
What's the problem here ?
The Inherited fields
option will turn out if:
public
, protected
(or package-protected within the same package) toString
method contextually to a right-click when your cursor is within the child class The latter can be confusing: it's not where you right-click, but where your actual cursor is, that determines for which class the toString
(et al.) method should be generated.
You have to write a toString()
method in the superclass and then you need to select the inherited method and select toString()
there.
Bit late, but consider using the reflectionToString
method in the ToStringBuilder class in the Apache Commons library rather than implementing your own toString
method for each class. You can use it like this:
public String toString() {
ToStringBuilder.reflectionToString(this)
}
It'll dynamically generate a String
based on all the fields in your class, including those in any superclasses.
You can also tune the output a bit if you want different behaviour for some cases (excluding some fields, not including inherited fields etc).
I know this is slightly off-topic, but someone might prefer the following code:
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();
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.