我有一个类,其中包含一个看起来像这样的人的信息:
public class Contact {
private String name;
private String location;
private String address;
private String email;
private String phone;
private String fax;
public String toString() {
// Something here
}
// Getters and setters.
}
Run Code Online (Sandbox Code Playgroud)
我想toString()返回this.name +" - "+ this.locations + ...所有变量.我试图使用这个问题所示的反射实现它,但我无法设法打印实例变量.
解决这个问题的正确方法是什么?
cle*_*tus 92
从实现到字符串:
public String toString() {
StringBuilder result = new StringBuilder();
String newLine = System.getProperty("line.separator");
result.append( this.getClass().getName() );
result.append( " Object {" );
result.append(newLine);
//determine fields declared in this class only (no fields of superclass)
Field[] fields = this.getClass().getDeclaredFields();
//print field names paired with their values
for ( Field field : fields ) {
result.append(" ");
try {
result.append( field.getName() );
result.append(": ");
//requires access to private field:
result.append( field.get(this) );
} catch ( IllegalAccessException ex ) {
System.out.println(ex);
}
result.append(newLine);
}
result.append("}");
return result.toString();
}
Run Code Online (Sandbox Code Playgroud)
Osc*_*han 46
当开源已经很好地完成工作时,你为什么要重新发明轮子?
apache common-langs和spring都支持一些非常灵活的构建器模式
对于apache,这是你如何反思地做到这一点
@Override
public String toString()
{
return ToStringBuilder.reflectionToString(this);
}
Run Code Online (Sandbox Code Playgroud)
如果您只想打印您关心的字段,请按以下步骤操作.
@Override
public String toString()
{
return new ToStringBuilder(this)
.append("name", name)
.append("location", location)
.append("address", address)
.toString();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用非默认的ToStringStyle "打造"您的打印输出,甚至可以使用您自己的样式进行自定义.
我没有亲自尝试使用Spring ToStringCreator api,但它看起来非常相似.
小智 34
如果您使用的是Eclipse,这应该很简单:
1.按Alt+ Shift+S
2.选择"Generate toString()......"
请享用!你可以拥有toString()的任何模板.
这也适用于getter/setter.
Ste*_*tre 11
通用toString()单行,使用反射和样式定制:
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
...
public String toString()
{
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
Run Code Online (Sandbox Code Playgroud)
另一个简单的方法是让您为您Lombok生成toString方法。
为了这:
Lombok到您的项目@ToString到类的定义中例如,在您的情况下,您的类如下所示:
@ToString
public class Contact {
private String name;
private String location;
private String address;
private String email;
private String phone;
private String fax;
// Getters and setters.
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下的输出示例:
Contact(name=John, location=USA, address=SF, email=foo@bar.com, phone=99999, fax=88888)
Run Code Online (Sandbox Code Playgroud)
有关如何使用注释的@ToString更多详细信息。
注意:您还可以为您Lombok生成吸气剂和吸气剂,这是完整的功能列表。
| 归档时间: |
|
| 查看次数: |
112162 次 |
| 最近记录: |