我们可以用这样的名字创建两个对象:
(我的问题是关于 param 对象)
List<ParameterClass> parameters = new ArrayList<ParameterClass>();
ParameterClass param = new ParameterClass();
param.setName("name1");
parameters.add(param);
param = new ParameterClass();
param.setName("name2");
parameters.add(param);
如您所见,此代码编译并且运行良好。但我的问题是你是否推荐这种编码?使用一个变量用于不同目标是可以接受的我们为什么不这样做?
感谢
答案 0 :(得分:2)
重用变量是可以接受的,但它确实会妨碍代码的可读性,并且还会导致很难找到错误。你需要相应地称重。
答案 1 :(得分:2)
我会做类似的事情:
List<ParameterClass> parameters = new ArrayList<ParameterClass>();
parameters.add(new ParameterClass("name1"));
parameters.add(new ParameterClass("name2"));
这将删除您的参数变量,并解决您的问题。
你需要有一个构造函数,当然这个构造函数作为参数,但我认为这是一个公平的游戏。
答案 2 :(得分:1)
我没有看到参数重用没有错。当然,代码的可读性是另一回事。
答案 3 :(得分:1)
在此代码中
ParameterClass param = new ParameterClass();
param只是对new()创建的对象的引用。再次调用new()时,引用将指向新创建的对象。所以你可以说引用在这里是假的,因为你打算填充ArrayList。
从某种意义上说,这实际上是正确的方法。当你说parameters.add(param);
实际发生的是另一个引用被创建并指向你的旧对象。现在,您可以自由地将旧引用指向您创建的任何新对象。
答案 4 :(得分:1)
是的,如果这是您使用此变量的所有代码
,则可以接受当您声明并初始化第一个时,编译器编写代码以保留param变量指向的实例的内存区域,您可以使用该变量来设置属性,
ParameterClass param = new ParameterClass();
param.setName("name1");
parameters.add(param);
然后你声明并初始化另一个内存区域并使用相同的变量来指向这个区域,但它是一个完全不同的区域,没有办法混合这两个
param = new ParameterClass();
param.setName("name2");
parameters.add(param);
当然,您需要将对这些区域的引用传递给某个容器对象,以便以后能够检索它们
答案 5 :(得分:1)
要么采用明宇描述的方式(=根本不使用名称),另一种可能性是缩小名称的范围:
List<ParameterClass> parameters = new ArrayList<ParameterClass>();
{
ParameterClass param = new ParameterClass();
param.setName("name1");
parameters.add(param);
}
{
ParameterClass param = new ParameterClass();
param.setName("name2");
parameters.add(param);
}
通过这种方式,您可以“重复使用”该名称,并确保不会在未来的道路上使用param。
这也是“复制和粘贴安全”,因为这样的错误很难发现:
ParameterClass param = new ParameterClass();
List<ParameterClass> parameters = new ArrayList<ParameterClass>();
param.setName("name1");
parameters.add(param);
param.setName("name2");
parameters.add(param);