Composición y genéricos

VeryNiceArgumentException:

Estoy tratando de resolver esta situación "composición + genéricos", y hacer PostCompany.send (msg) sea compatible con el tipo aprobado / inyectado a la clase.

¿Qué podía cambiar para permitir que tanto Fedex y FedexPlus siendo utilizados como tipos genéricos en clase PostCompany, puesto que el método de envío de Fexed espera String como parámetro y FeexPlus espera entero?

interface Poster<T> {
    void send(T msg);
}

class Fedex implements Poster<String> {

    @Override
    public void send(String msg) {
        // do something
    }
}

class FedexPlus implements Poster<Integer> {

    @Override
    public void send(Integer msg) {
        // do something
    }
}

class PostCompany<P extends Poster> {

    private final P poster;

    public PostCompany(P poster) {
        this.poster = poster;
    }

    public void send(??? msg) { // <-- Here 
        this.poster.send(msg);
    }
}
Marcos Vasconcelos :

Se ha perdido el tipo de un cartel

class PostCompany<T, P extends Poster<T>> {
    public void send(T msg) { // <-- Here 
        this.poster.send(msg);
    }
}

Pero en realidad mejor simplemente escriba el tipo de objeto

class PostCompany<T> {

    private final Poster<T> poster;

    public PostCompany(Poster<T> poster) {
        this.poster = poster;
    }

    public void send(T msg) { // <-- Here 
        this.poster.send(msg);
    }
}

Ya que siempre va a utilizar los métodos de interfaz de cartel

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=199971&siteId=1
Recomendado
Clasificación