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