2012-05-05 48 views
0

我有一個類Employee和類Building
這些類從類層次結構角度來看並不相互關聯。
我需要處理一堆EmployeeBuilding對象,它們的結果將以不同的列表結束。
所以我有和接口,例如接口定義和泛型。這應該以不同的方式定義?

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

的想法是,在字符串s攜帶關於任一種EmployeeBuilding和之後一定的處理添加到結果列表中任一一個Employee對象或對象Building執行信息。
Processor有兩種實現方式,一種是EmployeeProcessorBuildingProcessor
代碼中的某處我可以參考其中任何一個,並且我將List<Employee>List<Building>傳遞給process方法。

問題是代碼不能編譯。
當我做裏面的EmployeeProcessorresult.add(new Employee(a,b,c,d));
我得到:

的方法在類型列表中添加(?捕獲#2的)是不是 適用於參數

我想我能理解問題,但我不想將接口更改爲:

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

iee不指定列表的類型。
有沒有辦法解決這個問題?接口定義是否錯誤?
注意:這個接口是Command模式的一部分

+0

1.發佈整個錯誤消息。 2.發佈你的實際代碼 - 不是甚至不是有效的Java代碼片段... – thkala

+0

@thkala:1)沒有錯誤消息。 Eclipse編譯器指示2)你是什麼意思,無效的Java? – Cratylus

+0

1.這不是一個「跡象」。這是一個成熟的編譯器錯誤消息。 2.'public process(String s,List result);'不是有效的方法聲明 - 沒有返回類型... – thkala

回答

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>