У меня есть класс Employee
и класс Building
.
Эти классы не связаны друг с другом с точки зрения иерархии классов.
Мне нужно обработать кучу и Building
объектов, и их результаты попадут в разные списки.
Итак, у меня есть и интерфейс, например.Определение интерфейса и дженерики. Должно ли это определяться по-разному?
public interface Processor{
public void process(String s, List<?> result);
}
Идея заключается в том, что строка s
несет в себе информацию, относящуюся либо к Employee
или Building
и реализации после того, как некоторая обработка добавляет к списку результатов либо в качестве Employee
объекта или Building
объекта.
Существует 2 варианта Processor
один из них - EmployeeProcessor
и BuildingProcessor
.
Где-то в коде я получаю ссылку на любой из них, и я передаю либо List<Employee>
, либо List<Building>
в метод process
.
Проблема в том, что код не компилируется.
Когда я это сделаю, например. внутри EmployeeProcessor
: result.add(new Employee(a,b,c,d));
я получаю:
Метод добавления (? захвата # 2-в) в списке типов не применяется для аргументов
Я думаю, я могу понять проблема, но я не хочу менять интерфейс:
public interface Processor{
public process(String s, List result);
}
Т.е. Т.е. не указывать тип списка.
Есть ли способ обойти эту проблему? Не определено ли определение интерфейса?
Примечание: этот интерфейс является частью реализации Command
pattern
1. Опубликовать сообщение об ошибке. 2. Опубликуйте свой фактический код - не фрагменты, которые даже не действительны Java ... – thkala
@thkala: 1) Нет сообщения об ошибке. Показатель компилятора Eclipse 2) Что значит недействительный java? – Cratylus
1. Это не «указание». Это полномасштабное сообщение об ошибке компилятора. 2. 'public process (String s, List result);' не является допустимым объявлением метода - нет возвращаемого типа ... – thkala