我的bean类中有一个内部bean类。在MyBean类方法中,我将创建一个内部bean类的实例,然后设置一些字段值。请参阅我的示例代码。
我的问题是:WAY 1是否比WAY 2更好,因为我们直接将值设置为字段?我们应该采用哪种方式?谢谢。
public class MyBean {
public void myMethod() {
String p1 = "calculate p1";
String p2 = "calculate p2";
// WAY 1
InnerBean innerBean = new InnerBean();
innerBean.p1 = p1;
innerBean.p2 = p2;
// WAY 2
InnerBean innerBean = new InnerBean(p1,p2);
innerBean.doSomething();
}
// WAY 1
private class InnerBean {
private String p1;
private String p2;
public void doSomething() {
System.out.println(p1 + p2);
}
}
// WAY 2
private class InnerBean {
private String p1;
private String p2;
public InnerBean1(String p1, String p2) {
this.p1 = p1;
this.p2 = p2;
}
public void doSomething() {
System.out.println(p1 + p2);
}
}
}
答案 0 :(得分:1)
我认为性能不会有显着差异。这更像是设计和风格的问题。
常用的方法是使用构造函数或setter和getter。这符合“信息隐藏”的设计原则。由于这将是大多数开发人员期望看到的方式,因此对于我们大多数人来说这也更容易阅读。
但是由于内部类是私有的,我会说使用直接访问内部类的字段是绝对可以的,如果这在您的团队中很常见的话。这可能会导致细长的代码。
答案 1 :(得分:1)
我会使用构造函数,但如果你不打算将嵌套类移到外面,这在这种情况下并不重要。
如果这些字段是不可变的,那么将它们声明为final并使用构造函数是最简洁的方法。
此外,如果嵌套类不需要引用外部作用域(即类MyBean
),则应将其声明为static
。
答案 2 :(得分:0)
在第一种方式中,您实际使用的是InnerBean的默认构造函数,因为它未被声明。这是因为java如果没有声明构造函数,则接受使用InnerBean()并设置p1 = ""; , p2 = "";
的字符串值
之后您实际做的是使这些字符串指向其他东西而不是空字符串。
// WAY 1
InnerBean innerBean = new InnerBean();
innerBean.p1 = p1;
innerBean.p2 = p2;
在第二种方式上,重写了java默认构造函数,并将值作为参数传递。我建议这样,因为你应该在你的班级中提供一个构造函数。
// WAY 2
InnerBean innerBean = new InnerBean(p1,p2);
innerBean.doSomething();
除此之外,考虑到方式2的步骤数量需要更少。因为在第一种情况下,您使用预定义值创建对象,然后更改指针,而在第二种情况下,您只需使用给定值创建对象。
答案 3 :(得分:0)
我总是使用构造函数,因为未初始化的类变量会导致很多错误。 Eclipse,IntelliJ和大多数其他现代IDE可以从类变量列表中生成构造函数,以免您手动输入它。我在Java之前做了C ++,不完整的类初始化引起的痛苦使我感谢Java更清晰的类初始化逻辑。对于像你的私人课程这样的琐碎案例,没有多大意义,但我总是努力保持最佳实践。