Java泛型如何更改参数化子类

Java泛型如何更改参数化子类,java,generics,Java,Generics,我有这样的结构: 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 ext

我有这样的结构:

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{}
公共抽象类处理器{private BlockingQueue;}
公共类调度程序扩展处理器{
名单;
公共调度程序(){
}
公共作废流程(ParsedRecord记录){
//布拉布拉
}
}
我希望将Dispatcher类与ParsedRecord或从ParsedRecord类扩展的任何类型的参数一起使用


请帮助我了解如何正确更改Dispatcher类定义?

可以简单地将类定义更改为:

public class <T extends ParsedRecord> Dispatcher extends AbstractProcessor<T> {
公共类调度程序扩展了抽象处理器{
然后:将该
T
用作列表的类型,或用于指定给
process()
的参数


但这里真正的答案是:研究这个问题。不要尝试尝试尝试反复试验。

您声明了一个
处理器
类,但扩展了
抽象处理器

您可能在问题中犯了命名错误。

因此,我假设您只有一个
AbstractProcessor
类可以给出具体的答案

在您的情况下,如果希望将类的类型声明与方法的参数关联,则必须首先在父类中声明方法,并使用声明的类型指定方法的参数:

public abstract void process(T record){
您将拥有一个父类:

public abstract class AbstractProcessor<T extends Record >{
    ...
    public abstract void process(T record);
   ...
}
公共抽象类AbstractProcessor{
...
公开摘要作废程序(T记录);
...
}
在子类中,您可以得到以下对称声明:

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

    public void process(ParsedRecord record){
      //blabla
    }
}
公共类调度程序扩展抽象处理器{
...
公共作废流程(ParsedRecord记录){
//布拉布拉
}
}

我以前尝试过这个变体,但在Dispatcher子类中出现错误,对此我不确定。在您的回答之后,我修复了这个问题。谢谢。我保证我会彻底学习泛型。我已经更改了类的原始名称)并且忘记了一个。您在这里得到了我的投票;因为您花时间询问了问题中的不一致性;他说lped最终会改进这件事!通常你是公平的:)