2012-05-05 1 views
0

私はクラスEmployeeとクラスBuildingを持っています。
これらのクラスは、クラス階層の観点からは互いに関連していません。
EmployeeBuildingのオブジェクトを処理する必要があり、その結果は別のリストになります。
です。インターフェース定義とジェネリック。これは別に定義する必要がありますか?

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

アイデアは、文字列がsEmployee又はBuildingと何らかの処理が結果リストのいずれかEmployeeオブジェクトまたはBuildingオブジェクトに追加した後、実装のいずれかに関連する情報を運ぶことです。
BuildingProcessorの2つの実装があります。
コードのどこかで、これらのいずれかへの参照があり、List<Employee>またはList<Building>のいずれかをprocessメソッドに渡します。

問題は、コードがコンパイルされないことです。
EmployeeProcessor内側:result.add(new Employee(a,b,c,d));
私が手:

方法は(?キャプチャ#2 - の)を追加するタイプのリストに、私は私が理解できると思い引数

には適用 ではありません問題はありますが、インターフェイスを次のように変更する必要はありません。

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

eリストのタイプを指定しないでください。
この問題を回避する方法はありますか?インタフェース定義が間違っていますか?
注:このインターフェイスは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()); 
    } 
} 

FYIでは、さらにタイプを制限できます。たとえば、BuildingクラスとEmployeeクラスの両方が実装されている場合は、Processableと入力してinterface Processor<T extends Processable>

関連する問題