我有几个类都扩展了相同的抽象类Encoder.抽象类要求其子代覆盖接受泛型类型参数的抽象方法(在此示例中为Subscriber< T>).覆盖此方法的每个子类对此参数使用不同的类型.
abstract class Encoder {
protected String mSomeArg;
public Encoder(String someArg) {
mSomeArg = someArg+" super";
}
public abstract void start(Subscriber subscriber);
}
class ExampleEncoder extends Encoder {
public ExampleEncoder(String arg) {
super(arg); // how to make super class get generic type?
// eg: new Encoder(arg)
}
@Override
public void start(Subscriber subscriber) {
Message msg = new Message("hi "+mSomeArg);
subscriber.event(msg);
}
}
示例用例:
Encoder sample = new ExampleEncoder();
sample.start(new Subscriber() {
@Override
public void event(Message msg) {
Log(msg.text());
}
});
Encoder otherSample = new OtherEncoder();
sample.start(new Subscriber() {
@Override
public void event(OtherThing thing) {
Log(thing.toString());
}
});
问题:每个子类如何使用此抽象方法所需的泛型类型调用其super()?
注意:使用订阅者在这个抽象方法中,这个例子会破坏我使用泛型的目的.此外,使用它所需的泛型类型实例化每个子类(例如:new ExampleEncoder< Message>())似乎是一种看似合理的解决方法,但似乎也没有必要
解决方法:
这个
class ExampleEncoder extends Encoder {
是一个raw-type.我很确定你想要的东西
class ExampleEncoder extends Encoder {
如果你想要具体类也是通用的那么你可以使用
class ExampleEncoder extends Encoder
但是您需要修改start以获取订阅者< T>.
标签:java,generics
来源: https://codeday.me/bug/20190528/1171856.html