我需要创建多个具有相同参数的构造函数,以便我可以从我的DAO类中调用这些构造函数来填充不同的下拉值
public static Employee empType(String empCode, String empType) {
Employee emp = new Employee();
emp .empCode= empCode;
emp .empType= empType;
return emp ;
}
public static Employee empDept(String deptCode, String deptName) {
Employee emp = new Employee();
emp .deptCode= deptCode;
emp .deptName= deptName;
return emp ;
}
当我从DAO类引用时,我该如何引用这些构造函数?
E.g。
private static Employee myList(ResultSet resultSet) throws SQLException {
return new <what should be here>((resultSet.getString("DB_NAME1")),
(resultSet.getString("DB_NAME2")));
}
答案 0 :(得分:8)
您可以合并两个功能:
public static Employee createEmp(String empCode, String empType, String deptName) {
Employee emp = new Employee();
emp .empCode= empCode;
emp .empType= empType;
emp .deptName= deptName;
return emp ;
}
并使用null
作为不需要的参数。
答案 1 :(得分:6)
您不能创建具有相同名称和相同参数的多个构造函数/方法
您可以做的是更改您的实施,而这些不是结构。
你可以按照Baraky的说法,你也可以使用它(创建一个布尔标志或一个int值标志)
public Employee empType(String val1, String val2, int type) {
Employee emp = new Employee();
if(type == 1){
emp .empCode= val1;
emp .empType= val2;
}else if(type ==2){
emp.deptCode= val1;
emp .deptName= val2;
}
return emp ;
}
答案 2 :(得分:1)
如果你必须有多个构造函数,你可以像这样添加一个虚拟参数。
public static Employee empType(String empCode, String empType) {
Employee emp = new Employee();
emp .empCode= empCode;
emp .empType= empType;
return emp ;
}
public static Employee empDept(String deptCode, String deptName, bool dummy) {
Employee emp = new Employee();
emp .deptCode= deptCode;
emp .deptName= deptName;
return emp ;
}
执行此操作时,它是最小的性能(非常非常小),但如果代码更具可读性,则值得:)
答案 3 :(得分:1)
我不认为java允许多个具有相同参数(数据类型)的构造函数。
答案 4 :(得分:1)
如果您需要灵活创建对象,请查看Builder
模式。但是,在你的情况下,我不明白为什么它只是让一个构造函数包含所有参数。只需从resultSet中获取所有属性,如果它们为null,则它们就不会被设置。
答案 5 :(得分:1)
如果你有两个具有相同参数含义但效果不同的构造函数,你可以尝试将它们合二为一:
public Name(Type parameter, boolean type) {
if(type) {
}else {
}
}
如果您有2个以上相同的构造函数,请使用int type
和switch
。只是建议。
编辑:types
在这种情况下应由enum
定义,以便更轻松地掌握代码。
答案 6 :(得分:1)
如果构造函数使用一组不同的参数来改变它的行为方式,我建议扩展或使用composition来创建一个带有新参数集的新类。
那也将坚持OPEN / CLOSE主席。
答案 7 :(得分:0)
从article:
在Java中,不能有多个方法(包括构造函数)与 相同的论点。要解决此限制,您需要使用 具有不同名称的静态方法,将客户端代码用作 构造函数。在静态方法
ctorApple
之后的代码中,ctorBanana
和ctorCarrot
内部调用私有构造函数Foo()
并以相同的身份充当多个构造函数的角色 论点。前缀ctor旨在提醒客户这些 方法充当构造函数的角色。
class Foo
{
private Foo()
{
// ...
}
public static Foo ctorApple(/* parameters */)
{
Foo f = new Foo();
// set properties here using parameters
return f;
}
public static Foo ctorBanana(/* parameters */)
{
Foo f = new Foo();
// set properties here using parameters
return f;
}
public static Foo ctorCarrot(/* parameters */)
{
Foo f = new Foo();
// set properties here using parameters
return f;
}
}