0

我有一堂课Employee和一堂课Building
从类层次结构的角度来看,这些类彼此不相关。
我需要处理一堆EmployeeBuilding对象,它们的结果最终会出现在不同的列表中。
所以我有和接口,例如

public interface Processor{  
  public void process(String s, List<?> result);  
}  

这个想法是字符串s携带与 anEmployee或 a相关的信息,并且经过一些处理后的实现将对象或对象Building添加到结果列表中。一个 is和一个 有 2 种实现。 在代码中的某处,我得到了对其中任何一个的引用,然后我将 a或 a传递给该方法。 EmployeeBuilding
ProcessorEmployeeProcessorBuildingProcessor
List<Employee>List<Building>process

问题是代码无法编译。
当我在里面做例如EmployeeProcessorresult.add(new Employee(a,b,c,d));
我得到:

List 类型中的方法 add(capture#2-of ?) 不适用于参数

我想我可以理解这个问题,但我不想将界面更改为:

public interface Processor{  
  public process(String s, List result);  
}   

即不指定列表类型。
有没有办法解决这个问题?接口定义错了吗?
注意:此接口是Command模式实现的一部分

4

1 回答 1

3

这就是我的想法。

interface Processor<T>{
    public void process(String s, List<T> result);
}

class BuildingProcessor implements Processor<Building>{
    @Override
    public void process(String s, List<Building> result) {
        result.add(new Building());
    }
}

class EmployeeProcessor implements Processor<Employee>{
    @Override
    public void process(String s, List<Employee> result) {
        result.add(new Employee());
    }
}

仅供参考,您可以进一步限制类型。例如,如果BuildingEmployee类都实现了,比如说Processable,,那么你可以做interface Processor<T extends Processable>

于 2012-05-05T09:56:46.243 回答