在过去的四年中,我一直将Java开发作为一种爱好,并且对Java Bean设置方法的约定很感兴趣。
如果我使用Eclipse生成设置器,我将得到:
[EnableCors("WithExposedContentDispositionHeader")]
public async Task<IActionResult> GetExcelReport([FromQuery] ReportInput input) {...}
现在我了解它是如何工作的,但是对我(作为一个旧的开发者)来说,具有两个具有相同名称但标识不同对象的变量是令人困惑的。我发现您是否拼错了参数变量,例如bar仍然可以编译但不起作用;
我倾向于使用:
private String var;
public void setVar(String var){
this.var = var;
}
任何人都可以解释这两种方法是否有效率或优势。
答案 0 :(得分:1)
任何人都可以解释这两种方法是否有效率或优势。
这完全是风格问题。此处有两个样式,它们之间相互关联:
具有相同名称的实例变量(字段)和参数。
在访问实例变量(或方法)时放弃this.
。
使用相同的名称会强制您使用this.
,但是使用不同的名称并不意味着您不能使用this.
,这就是为什么它们是相互独立但相互联系的样式问题的原因。
所有这些都是有效的选择(假设实例变量声明),并且就编译器所做的工作而言,使用哪种都没有区别:
// 1
public void setVar(String var) {
this.var = var;
}
// 2
public void setVar(String varp) {
var = varp;
}
// 3
public void setVar(String varp) {
this.var = varp;
}
这对可维护性等有所不同,但这取决于样式,这取决于您和/或您正在处理的项目的样式指南。
答案 1 :(得分:0)
任何一种方法都没有优势。 编译的代码是相等的。
为防止意外设置参数var
而不是this.var
,将final
添加到(所有)参数是个好习惯。
public void setVar(final String var) {
this.var = var;
// var = var; // fails, because var cannot be set again.
答案 2 :(得分:0)
重复变量名是可以理解的。以获得更清晰的获取和设置方式
public class test{
private String name;
public void setVar(String name){
name = name;
}
}
当您尝试设置该值时,并具有如上所述的表达式。
test t1 = new test();
t1.setVar("myValue");
代码要做的是
t1.name = myValue;
如果要创建和操作用于类测试的多个对象,则由于访问私有变量并为其分配了值,分配将变得混乱。
您要做的是确保仅保留对象所保存的变量实例。因此,您添加
public class test{
private String name;
public void setVar(String name){
this.name = name;
}
}
现在,类测试t1,t2等的每个实例都将仅对其对象进行操作。纯粹出于可维护性,传递的变量的命名与我们要为其分配值的变量的命名保持相同。