Как перегрузить метод с общим параметром в java?

Возможный дубликат:
Стирание Java с общей перегрузкой (без переопределения)

Как перегружать метод с помощью общего параметра в java?

Скажем, у меня следующий класс

import java.util.List;

public class C {

    public void foo(List<String> a){

    }

    public void foo(List<Integer> b){

    }

}

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

Если я не хочу использовать

public void foo(List<T> a){

}

Есть ли другой способ перегрузить метод foo()?

Ответы

Ответ 1

Два подхода, которым вы должны следовать.

  • Измените имена методов.

  • Используйте для этого интерфейс.

то либо поместите код foo в сами объекты, либо используйте двойная отправка (в зависимости от вашей парадигмы дизайна и вкуса).

С кодом в объектах, которые были бы:

public interface FooInterface{
    void foo();
}


public class Foo
{

    public <T extends FooInterface> void abc(Collection<T> objects)
    {
        for(T object: objects) 
        {
            object.foo();
        }           
    }
}

public class FooString implements FooInterface {

    public void foo(){
       // do foo for String
    }
}

public class FooInteger implements FooInterface {

    public void foo(){
      // do foo for Integer
    }

}

Если домен содержит вашу логику.

С двойной отправкой вы передадите "FooInterface" в метод foo, а на обработчике вызовите соответствующий метод в зависимости от типа.