Перегрузка метода - PullRequest
       7

Перегрузка метода

4 голосов
/ 21 декабря 2010

Мне было интересно, можете ли вы предложить что-то здесь.

Я хотел бы иметь 2 метода:

doSomething(List<Data>) and
doSomething(List<Double>)

Поскольку тип параметра тот же, Java жалуется

Есть ли способ как-то заставить эту перегрузку произойти?

Ответы [ 5 ]

7 голосов
/ 21 декабря 2010

К сожалению, нет. Поскольку Java реализует обобщения через стирание, оба эти метода будут компилироваться до:

doSomething(List)

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

Лучшее, что вы можете сделать:

doSomethingData(List<Data>)
doSomethingDouble(List<Double>)

или что-то столь же противное.

3 голосов
/ 21 декабря 2010
public void doSomething(List list) {
    if(list.size() > 0) {
        Object obj = list.get(0);
        if(obj instanceof Data) {
           doSomethingData((List<Data>)list);
        } else if (obj instanceof Double) {
           doSomethingDouble((List<Double>)list);
        }
    }
}
2 голосов
/ 21 декабря 2010

Почему бы просто не назвать их по-другому:

doSomethingDouble(List<Double> doubles);
doSomethingData(List<Data> data);
1 голос
/ 21 декабря 2010

Обобщения доступны только компилятору во время компиляции. Они не являются конструкцией времени выполнения, так как два вышеуказанных метода идентичны, так как во время выполнения оба тоже эквивалентны

0 голосов
/ 21 декабря 2010

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

doSomething(List<Data>, Data)
doSomething(List<Double>, Double)

Ужасно, но работает.

В качестве альтернативы вы можете дать методам разные имена.

...