2013-04-18 2 views
3

мне нужно создать несколько конструкторов с тем же аргументами, так что я могу назвать это из моего класса DAO для заполнения других выпадающего значенияJava - Несколько Конструкторов с тем же аргументами

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

Даже у меня были такие же требования, но я не думаю, что это возможно, поскольку Java отличает перегруженный метод на основе аргументов методов, и если два конструктора имеют одинаковые аргументы, это не сработает.Но эксперты должны пролить свое мнение. –

+4

Действительно ли они конструкторы? Infact, они даже не перегружены! – SudoRahul

+0

Нет, они не являются конструкторами. Они являются заводскими функциями. – NilsH

ответ

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 как ненужная аргумента.

+0

baraky null подход будет полезен и лучше. Спасибо – user75ponic

+0

привет, Не могли бы вы привести пример использования null как ненужного аргумента? Спасибо – user5923402

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 ; 
} 

При этом это минимальная производительность (veryveryvery маленький) падение, но если код более читаемым это стоит :)

+0

Является ли это общепринятым методом борьбы с такими ситуациями? –

1

Я не думаю, что несколько конструктор с теми же аргументами (тип данных) разрешены java.

+0

перегруженные методы ?! Насколько я знаю, перегруженные методы имеют ** SAME NAME **. – SudoRahul

1

Если вам нужно гибкое создание объектов, ознакомьтесь с рисунком Builder. В вашем случае, однако, я не понимаю, почему это не должно работать только для того, чтобы иметь один конструктор со всеми вашими параметрами. Просто извлеките все свойства из набора результатов, и если они равны нулю, они просто не будут установлены.

5

Вы не можете создать несколько конструкторов/методов с тем же именем и теми же аргументами

Что вы можете сделать, это изменить реализацию, и те не Contructors.

Вы можете следить за то, что 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 ; 
} 
+1

Если тип будет перечислять, код будет более читаемым. –

+0

Он также может это сделать или использовать логическое значение. просто указывая, что есть другие подходы, которые он или она может сделать. – KyelJmD

+0

В конструкторе java не может быть статическим и он не может вернуть значение. Я думаю, что вы просто перегружаете функцию. – Imrank

1

Если у вас есть два одинаковых конструктор с тем же значением параметра, но другой эффект, вам можно попробовать ухватиться их в одно:

public Name(Type parameter, boolean type) { 
    if(type) { 

    }else { 

    } 
} 

Если у вас есть 2+ же конструктор затем использовать int type и switch. Просто предложение.

EDIT: types в этом случае должен быть определен enum для упрощения захвата кода.

1

Если использование другого набора параметров для конструктора изменяет поведение, как оно действует, я бы предложил расширить или использовать композицию для создания нового класса с новым набором параметров.

Это также будет придерживаться OPEN/CLOSE priedal.

Смежные вопросы