如何解决如何在同一行上实例化对象和调用设置程序?
| 如果我有一个带有默认构造函数的Employee
类:
private String firstName;
public Employee(){}
和二传手:
public void setFirstName(String firstName){
this.firstName = firstName;
}
为什么这种尝试无法实例化并在同一行调用setter?
Employee employee = new Employee().setFirstName(\"John\");
解决方法
您还可以使用以下语法:
Employee employee = new Employee() {{
setFirstName(\"John\");
}};
尽管请记住,它将创建一个匿名内部类,并且可能不是您想要的。
, 因为setFirstName
不返回任何东西。如果要链接方法,则setFirstName
必须返回Employee
。
另一种方法是让构造函数使用ѭ8作为参数。
, 方法“ 9”的返回类型为“ 10”(无)。尝试:
public Employee setFirstName(String fname) {
this.firstName = fname;
return this;
}
, (employee = new Employee()).setFirstName(\"John\");
按照标题中的要求执行实例化并调用setter,但不按照代码示例中的建议声明变量。
(Employee employee = new Employee()).setFirstName(\"John\");
我认为这可能行不通。但是您可以尝试。
当然,您总是可以在一行中填充多个语句。
Employee employee; (employee = new Employee()).setFirstName(\"John\");
要么
Employee employee = new Employee(); employee.setFirstName(\"John\");
如果我是你,我会选择一个参数化的构造函数。
, 应该是这样的:
Employee employee = new Employee();
employee.setFirstName(\"John\");
, 因为您想将employee
设置为.setFirstName(\"John\");
的值,所以它不会返回任何值,因为它是void
因此,您可以将设置器更改为:
public Employee setFirstName(String fname) {
this.firstName = fname;
return this;
}
或为ѭ0创建第二个构造函数
public Employee(String fname){this.firstName = fname;}
它将在初始化上设置firstname
。
, 尽管这有点矫kill过正,但您可以尝试使用构建器模式
public class Employee{
private String firstName;
public static class Builder{
private String firstName;
public Builder firstName(String firstName){
this.firstName = firstName;
return this;
}
public Employee build(){
return new Employee(this);
}
}
private Employee(Builder builder){
firstName = builder.firstName;
}
}
然后您可以执行以下操作
Employee e = new Employee.Builder().firstName(\"John\").build();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。