java快捷方式生成get_关于Java:在Eclipse中自动生成toString方法的快捷方式是什么?...

为一些简单的类自动生成toString方法的好还是坏做法?

我正在考虑生成类似下面的内容,该内容采用变量名称并生成一个toString方法,该方法打印名称及其后的值。

private String name;

private int age;

private double height;

public String toString(){

return String.format("Name: %s Age: %d Height %f", name, age, height);

}

什么是格式化程序? 为什么不使用String.format(String,Object ...)?

另请参见通过什么方法使hashCode /等于类的业务定义一致? 并使用注释生成equals / hashcode / toString

自动生成方式:通过IDE /其他外部工具还是通过反射? 反射特定问题:stackoverflow.com/questions/1526826/

Eclipse 3.5.2(可能还有更早的版本)已经提供了此功能。如果在编辑器中右键单击,则会在"源"->"生成toString()..."下找到它。

要回答有关自动生成toString()是否是不好的做法的问题,我认为不是。如果生成的代码与您自己编写的代码非常相似,那么为什么还要打个出来呢?

从版本8开始,IDEA也是如此(尽管您必须启用该选项)。您可以在上课时进行alt插入(或右键单击并选择"生成")。

非常感谢,那真的很方便。

IMO,这不能回答问题-OP正在询问其最佳实践,而在此答案中未提及。

我个人喜欢为所有对象实现toString方法,因为它有助于调试。

我会考虑使用Apache Commons ToStringBuilder。

您可以使用反射实现一个简单的toString方法,如下所示:

public String toString() {

return ToStringBuilder.reflectionToString(this);

}

使用此方法,如果/当添加字段时,您将不必更新toString方法。

虽然这样做确实有一些缺点。您无法控制显示哪些字段,并且反射具有缓慢的声誉。

@Don-我相信ToStringBuilder确实提供了更多具有精细控制的方法。至于性能,只需考虑何时调用toString()。通常仅在调试时使用。

stackoverflow.com/questions/3149951/给出了ToStringBuilder的示例或递归使用,并且stackoverflow.com/questions/6807771/拥有示例AspectJ方面,可以在许多类中隐式创建toString。

!!!仅供参考:使用反射会使函数的数量级变慢。意识到 !!

@Ajeet不开玩笑,这就是为什么您没有在prod中通常启用这种日志记录的原因。

如果您使用lombok,则它们具有@ToString批注,它将为您生成toString。

之所以用它代替使用eclipse生成toString更好,是因为如果以后添加,删除或更改类的属性,还必须重新生成toString。如果您使用龙目岛,则不必这样做。

Lombok的反射速度也快得多,支持字段排除,但不允许更改输出样式。另请参阅stackoverflow.com/questions/3852091/

要添加到史蒂夫和唐的答案(+1):

使您的toString()方法简单,确保它永远不会触发期望(尤其要注意可能为null的字段)。

如果可能的话,不要调用类的其他方法。至少,请确保您的toString()方法不会修改您的对象。

并且要注意愚蠢的exception-toString循环:

public class MyClass {

...

public String toString() {

// BAD PRACTICE 1: this can throw NPE - just use field1

return" field1=" + field1.toString()

+" extraData=" + getExtraData();

// BAD PRACTICE 2: potential exception-toString loop

}

public MyExtraData getExtraData() {

try {

.... do something

} catch(Exception e) {

throw new RuntimeException("error getting extradata -" + this.toString(),e);

}

}

}

在IntelliJ Idea中,您可以按alt + insert,将打开Generate弹出窗口;现在选择字段并单击确定按钮;而已。

1e28c2e80216ac6071dfc626d6eba36a.png

6dc6adb9af722ddd7ec38cf71ee6d406.png

3fc538aedef13fa4ca53175690b4ccb5.png

进一步的提示:在"生成toString"对话框中,您可以通过单击模板组合框上的下拉菜单来选择模板。如果需要,您可以在此处选择StringBuffer或根据需要选择任何其他模板。玩以习惯。我喜欢 :)

生成toString()方法的快捷方式

按Alt + Shift + S + S(两次)

右键单击->源->生成toString()...

转到源菜单->生成toString()...

转到Windows菜单->首选项->常规->键(在文本字段上写Generate toString)

刚刚注意到-在NetBeans IDE中,您可以通过选择要为right click->insert code生成字段的字段来生成toString()方法,或者使用快捷方式ALT+INSERT,然后选择toString()。

它的外观是:

@Override

public String toString() {

return"ClassName{"+"fieldName="+fieldName+'}';

}

它是调试的绝佳方法,不需要其他库。

添加toString()时要注意生成的文本的受众。一些框架使用toString()方法生成最终用户可见的文本(例如某些Web框架),而许多人使用toString()方法生成调试/开发人员信息。无论哪种方式,请确保您在toString实现中具有足够的唯一性以满足您的要求。

toString()的默认JDK实现会生成开发人员信息,因此,如果可能的话,通常使用我推荐的模式,但是如果您正在以不同的想法/期望进行项目,则可能会感到困惑...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值