[英]Java - Multiple constructors with same arguments
我需要创建多个具有相同参数的构造函数,以便我可以从我的 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 类引用时,如何引用这些构造函数?
例如
private static Employee myList(ResultSet resultSet) throws SQLException {
return new <what should be here>((resultSet.getString("DB_NAME1")),
(resultSet.getString("DB_NAME2")));
}
你不能。 此外,这些函数不是构造函数。 你想如何决定调用哪个“构造函数”???
您可以合并这两个功能:
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
作为不需要的参数。
您不能创建多个具有相同名称和相同参数的构造函数/方法
你可以做的是改变你的实现,而那些不是构造函数。
你可以按照 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 ;
}
如果你必须有多个构造函数,你可以像这样添加一个虚拟参数。
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 ;
}
这样做时,性能下降(非常非常小),但如果代码更具可读性,那就值得了:)
从文章:
在 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;
}
}
我认为 java 不允许具有相同参数(数据类型)的多个构造函数。
如果您需要灵活地创建对象,请查看Builder
模式。 但是,在您的情况下,我不明白为什么只拥有一个带有所有参数的构造函数就行不通。 只需从 resultSet 中获取所有属性,如果它们为 null,则不会设置它们。
如果您有两个相同的构造函数,参数含义相同但效果不同,您可以尝试将它们合二为一:
public Name(Type parameter, boolean type) {
if(type) {
}else {
}
}
如果您有 2 个以上相同的构造函数,则使用int type
和switch
。 只是建议。
编辑:这种情况下的types
应该由enum
定义,以便于代码掌握。
如果为构造函数使用一组不同的参数会改变它的行为方式,我建议扩展或使用组合来创建一个具有新参数集的新类。
这也将遵守 OPEN/CLOSE 主要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.