2017-05-12 11 views
3

私はこのような構造を持っている:Javaのジェネリックパラメータ化されたサブクラスを変更する方法

public class Record{} 
public class ParsedRecord extends Record {} 
public class RecordsList extends ParsedRecord {} 

public abstract class Processor<T extends Record >{ private BlockingQueue<T> queue;} 

public class Dispatcher extends Processor<ParsedRecord> { 

    List<ParsedRecord> list; 

    public Dispatcher() { 
    } 

    public void process(ParsedRecord record){ 
     //blabla 
    } 
    } 

は私がParsedRecordまたはParsedRecordクラスから拡張し、あらゆるタイプのパラメータでディスパッチャクラスを使用します。

Dispatcherクラス定義を正しく変更する方法を理解してもらえますか?その後、

public class <T extends ParsedRecord> Dispatcher extends AbstractProcessor<T> { 

と::

答えて

2

はにあなたのクラス定義を変更するような単純なものでしたあなたのリストのためのタイプとして、またはprocess()に与えられたパラメータにそのTを使用しています。

実際の答えはstudyconceptです。試行錯誤しないでください。

+0

私はこの変種を試しましたが、Dispatcherサブクラスでエラーが発生しましたが、それについてはわかりませんでした。ありがとう。ジェネリックを徹底的に学ぶことを約束します。 – Andrew

2

Processorクラスを宣言しますが、AbstractProcessorを拡張します。
おそらく、質問で命名ミスがあります。

具体的な回答をするにはAbstractProcessorクラスしかないと思います。

:あなたがメソッドのパラメータを持つクラスの型宣言に関連する場合は、あなたが最初に親クラスのメソッドを宣言し、宣言された型でそれのパラメータを指定する必要があなたの場合は

public abstract void process(T record){ 

あなたは親クラスを持っているでしょう:

public abstract class AbstractProcessor<T extends Record >{ 
    ... 
    public abstract void process(T record); 
    ... 
} 

そして、あなたはこの対称型宣言を得るサブクラスに:

+0

私はクラスの元の名前を変更しました)そして1つを忘れました – Andrew

+1

あなたはここで私の投票を得ました。あなたが質問の矛盾について尋ねる時間を取ったので、そのことを最終的に改善するのに役立った! – GhostCat

+0

通常あなたは公正です:) – davidxxx

関連する問題