Java 组成和泛型
我试图解决这种“组合+泛型”的情况,并使PostCompany.send(msg)与传递/注入到类中的类型兼容 由于Fexed的send方法需要字符串作为参数,而FeexPlus需要整数,我可以做些什么来允许Fedex和FedexPlus在PostCompany类中用作泛型类型Java 组成和泛型,java,oop,generics,composition,Java,Oop,Generics,Composition,我试图解决这种“组合+泛型”的情况,并使PostCompany.send(msg)与传递/注入到类中的类型兼容 由于Fexed的send方法需要字符串作为参数,而FeexPlus需要整数,我可以做些什么来允许Fedex和FedexPlus在PostCompany类中用作泛型类型 interface Poster<T> { void send(T msg); } class Fedex implements Poster<String> { @Overr
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);
}
}
界面海报{
无效发送(T msg);
}
联邦快递类海报{
@凌驾
公共无效发送(字符串消息){
//做点什么
}
}
类FedexPlus实现海报{
@凌驾
公共无效发送(整数消息){
//做点什么
}
}
类邮政公司{
私人海报;
公共邮政公司(P海报){
this.poster=海报;
}
public void send(?msg){/您错过了海报的类型
class PostCompany<T, P extends Poster<T>> {
public void send(T msg) { // <-- Here
this.poster.send(msg);
}
}
class邮政公司{
public void send(T msg){/定义PostCompany
时使用的是Poster
的原始格式。需要定义另一个类型参数来捕获Poster
的类型参数
然后,您可以将该新类型参数用作Poster
的类型参数,并用作send
方法的参数类型
class PostCompany<T, P extends Poster<T>> {
我会检查你的答案,因为你指出了我漏掉字体的地方,还建议了更简单的东西。
class PostCompany<T, P extends Poster<T>> {
public void send(T msg) {