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最终会改进这件事!通常你是公平的:)