Call super () in parent class using generics

I have several classes that extend the same one abstract class Encoder. For an abstract class, its children must override the abstract method, which takes a typical typed parameter ( Subscriber<T>in this example). Each subclass that overrides this method uses a different type for this.

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);
  }

}

Usage example:

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());
  }
});

Question: How can each subclass call its own super()with the common type that is required for this abstract method?

. Subscriber<?> . , (: new ExampleEncoder<Message>()) ,

+4
1

class ExampleEncoder extends Encoder {

raw-type. , -

class ExampleEncoder extends Encoder<Message> {

, ,

class ExampleEncoder<T> extends Encoder<T>

start, Subscriber<T>.

+6

Source: https://habr.com/ru/post/1569174/


All Articles