相信大家平常在使用java编程时经常会用到构造方法,但是有时候我们会遇到一个非常麻烦的问题:
如下
public class Person1 {
private String name;
private int age;
private String gender;
private String phone;
private String email;
private String address;
public Person1(String name, int age, String gender, String phone, String email, String address) {
super();
this.name = name;
this.age = age;
this.gender = gender;
this.phone = phone;
this.email = email;
this.address = address;
}
public Person1(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
}
private String name;
private int age;
private String gender;
private String phone;
private String email;
private String address;
public Person1(String name, int age, String gender, String phone, String email, String address) {
super();
this.name = name;
this.age = age;
this.gender = gender;
this.phone = phone;
this.email = email;
this.address = address;
}
public Person1(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
}
在上面这段代码中,我们定义了两个构造方法,但是如果要用 Person1(String name, int age, String gender, String phone)这个构造方法时又要很麻烦的去定义一个,这类问题我在数据库查询时经常遇到,比如当你只查询了name ,age这两个字段,然后为了方便访问需要实例化person对象时,就要重新定义Person(String age,int age)这个构造方法,这样十分麻烦,因此当你用builder去自定义构造方法,这些问题就迎刃而解了。具体方法如下:
代码
public class Person {
// 用builder替代构造方法可以省去定义很多构造方法的麻烦
public static class Builder {
private String name;
private int age;
private String gender;
private String phone;
private String email;
private String address;
// 如果这样定义,定义时就必须要带名字这个参数
public Builder(String name) {
this.name = name;
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setAge(int age){
this.age = age;
return this;
}
public Builder setGender(String gender) {
this.gender = gender;
return this;
}
public Builder setPhone(String phone) {
this.phone = phone;
return this;
}
public Builder setEmail(String email){
this.email = email;
return this;
}
public Builder setAddress(String address){
this.address = address;
return this;
}
public String getName(){
return name;
}
@Override
public String toString() {
return "Builder [name=" + name + ", age=" + age + ", gender=" + gender + ", phone=" + phone + ", email="
+ email + ", address=" + address + "]";
}
}
}
// 用builder替代构造方法可以省去定义很多构造方法的麻烦
public static class Builder {
private String name;
private int age;
private String gender;
private String phone;
private String email;
private String address;
// 如果这样定义,定义时就必须要带名字这个参数
public Builder(String name) {
this.name = name;
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setAge(int age){
this.age = age;
return this;
}
public Builder setGender(String gender) {
this.gender = gender;
return this;
}
public Builder setPhone(String phone) {
this.phone = phone;
return this;
}
public Builder setEmail(String email){
this.email = email;
return this;
}
public Builder setAddress(String address){
this.address = address;
return this;
}
public String getName(){
return name;
}
@Override
public String toString() {
return "Builder [name=" + name + ", age=" + age + ", gender=" + gender + ", phone=" + phone + ", email="
+ email + ", address=" + address + "]";
}
}
}
这样定义后,你就可以随心所欲的去定义构造方法了:
调用
public class Test {
public static void main(String[] args) {
//无论你需要Person属性中的哪几个,随便定义,而且不分顺序,方便性秒杀去定义构造方法
//前面定义了 Builder(String name),所以实例化时必须定义
Builder person = new Builder("小明").setGender("男").setPhone("432432").setAge(20);
System.out.println(person.toString());
System.out.println(person.getName());
}
}
public static void main(String[] args) {
//无论你需要Person属性中的哪几个,随便定义,而且不分顺序,方便性秒杀去定义构造方法
//前面定义了 Builder(String name),所以实例化时必须定义
Builder person = new Builder("小明").setGender("男").setPhone("432432").setAge(20);
System.out.println(person.toString());
System.out.println(person.getName());
}
}
运行结果:
Builder [name=小明, age=20, gender=男, phone=432432, email=null, address=null]
小明
当然,我们不会经常碰到这种需要反复去定义构造方法的情况,但是如果真的遇到,这种方法还是可以省掉不少繁琐的步骤的,提升我们的效率
相关推荐
【Android自定义Dialog与Builder模式】 在Android应用开发中,Dialog是不可或缺的组件,用于显示临时信息或进行用户交互。然而,系统默认的Dialog样式有限,无法满足所有设计需求。这时,通过自定义Dialog并结合...
至于`taglib`,它是Java Web应用中用来定义和管理自定义标签和函数的机制。TLD文件就是taglib的一部分,它提供了标签库的元数据,使得IDE和服务器能够识别并正确处理自定义标签和函数。 总结来说,自定义标签和函数...
你可以通过构造函数将一个Java对象转换为JSONObject,或者从JSON字符串创建JSONObject。例如,可以使用`org.json.JSONObject`的`fromObject()`方法将Java对象转换为JSON表示,反之,使用`toString()`方法将...
创建一个自定义异常类,你可以包含构造函数、属性和方法,以满足项目需求。下面是一个简单的自定义异常类的例子: ```java public class MyBusinessException extends RuntimeException { private int errorCode; ...
下面我们将详细探讨如何在Java中用数组为一个类定义多个对象,并进行实例化。 首先,让我们创建`Person`类。这个类可能包含一些属性,如姓名、年龄等,以及与这些属性相关的操作方法: ```java public class ...
db2中用java方法来加解密数据入库;
4. **findResource(String name)** 和 **findResources(String name)**:这两个方法用于查找资源,如图片、配置文件等,它们不涉及类的加载,但可能在某些自定义类加载器中用到。 自定义类加载器的应用场景包括: ...
在 Java 中用 Calendar 类计算周和周的起始日期需要了解 Calendar 类的使用方法和日期计算的逻辑,包括 setFirstDayOfWeek() 方法、getWeekOfYear() 方法、getFirstDayOfWeek() 方法和 getLastDayOfWeek() 方法等。...
java中用URLConnection类post方式提交表单 java中用URLConnection类post方式提交表单是指在java应用程序中使用java.net.URLConnection类来实现POST方式的表单提交。POST方式是HTTP协议中的一种常见的请求方法,它...
在Java编程语言中,开发人员会遇到各种各样的任务,如数据处理、用户交互、安全性、网络通信等。以下是对标题和描述中提及的一些关键知识点的详细解释: 1. **Application页面访问次数统计**: 在Java Web开发中,...
在C++ Builder中,TChart是一个强大的图表组件库,它允许开发者创建各种复杂的图表类型,包括用于实时数据显示的波形图。TChart是来自于Steema Software的 TeeChart for VCL 库,它提供了丰富的功能,使得在C++ ...
java中用dom解析xml的经典入门级文档
java中用FileUtil实现文件读写.pdf
本文将详细介绍Java中处理时间的常见方法,分为四个主要部分:获取当前时间、格式化时间、设置时间以及定时任务。 一、获取当前时间 Java提供了多种获取当前时间的方式。最常用的是通过`java.util.Date`类的构造...
主要给大家介绍了关于在java中用ObjectMapper类实现Json与bean转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
为了获取多级或自定义的汇总,我们可以使用`GROUPING SETS`功能,它提供了更灵活的分组方式,同时避免了不必要的计算,提高了SQL查询的效率。 `GROUP BY GROUPING SETS`允许我们自定义想要的汇总级别,从而得到特定...
Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...