Java 使用泛型调用父类的super()
我有几个类都扩展了相同的Java 使用泛型调用父类的super(),java,generics,Java,Generics,我有几个类都扩展了相同的抽象类编码器。抽象类要求其子类重写接受泛型类型参数的抽象方法(本例中为Subscriber)。重写此方法的每个子类对此参数使用不同的类型 abstract class Encoder<T> { protected String mSomeArg; public Encoder(String someArg) { mSomeArg = someArg+" super"; } public abstract void start(Su
抽象类编码器
。抽象类要求其子类重写接受泛型类型参数的抽象方法(本例中为Subscriber
)。重写此方法的每个子类对此参数使用不同的类型
abstract class Encoder<T> {
protected String mSomeArg;
public Encoder(String someArg) {
mSomeArg = someArg+" super";
}
public abstract void start(Subscriber<T> subscriber);
}
class ExampleEncoder extends Encoder {
public ExampleEncoder(String arg) {
super(arg); // how to make super class get generic type?
// eg: new Encoder<Message>(arg)
}
@Override
public void start(Subscriber<Message> subscriber) {
Message msg = new Message("hi "+mSomeArg);
subscriber.event(msg);
}
}
抽象类编码器{
受保护字符串mSomeArg;
公共编码器(字符串参数){
mSomeArg=someArg+“超级”;
}
公开摘要无效启动(用户);
}
类ExampleEncoder扩展了编码器{
公共示例编码器(字符串参数){
super(arg);//如何使super类获得泛型类型?
//例如:新编码器(arg)
}
@凌驾
公共无效启动(订户){
消息消息消息=新消息(“hi”+mSomeArg);
订户事件(msg);
}
}
示例用例:
Encoder sample = new ExampleEncoder();
sample.start(new Subscriber<Message>() {
@Override
public void event(Message msg) {
Log(msg.text());
}
});
Encoder otherSample = new OtherEncoder();
sample.start(new Subscriber<OtherThing>() {
@Override
public void event(OtherThing thing) {
Log(thing.toString());
}
});
Encoder sample=新示例Encoder();
sample.start(新订户(){
@凌驾
公共无效事件(消息消息消息){
日志(msg.text());
}
});
编码器otherSample=新的OtherEncoder();
sample.start(新订户(){
@凌驾
公共无效事件(其他事项){
Log(thing.toString());
}
});
问题:每个子类如何使用此抽象方法所需的泛型类型调用其super()
注意:在本例的这个抽象方法中使用Subscriber
,会破坏我使用泛型的目的。此外,用它所需的泛型类型实例化每个子类(例如:newexampleconder()
)似乎是一个可行的解决办法,但也似乎没有必要这样做
class ExampleEncoder extends Encoder {
这是一个很好的例子。我很确定你想要像这样的东西
class ExampleEncoder extends Encoder<Message> {
类示例编码器扩展编码器{
如果希望具体类也是泛型的,那么可以使用
class ExampleEncoder<T> extends Encoder<T>
类示例编码器扩展编码器
但是你需要修改
start
以获得一个订阅者
注意类编码器
非常容易混淆(至少对我来说是这样)。泛型通常只使用一个字母,以便于识别。例如:类编码器
。为了便于发布,对其进行编辑以使其更简单。