【发布时间】:2014-12-28 02:24:20
【问题描述】:
我有几个类都扩展了相同的abstract class Encoder。抽象类要求其子类覆盖一个接受泛型类型参数的抽象方法(本例中为Subscriber<T>)。覆盖此方法的每个子类对此参数使用不同的类型。
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);
}
}
示例用例:
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());
}
});
问题:每个子类如何使用该抽象方法所需的泛型类型调用其super()?
注意:在这个例子的抽象方法中使用Subscriber<?> 会破坏我使用泛型的目的。此外,用它需要的泛型类型(例如:new ExampleEncoder<Message>())实例化每个子类似乎是一个可行的解决方法,但似乎也没有必要
【问题讨论】:
-
请注意,
class Encoder<EventType>非常令人困惑(至少对我而言)。泛型通常只使用一个字母以便于识别。所以这将是:例如class Encoder<T>。 -
为方便发布而进行了编辑。