Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 组成和泛型_Java_Oop_Generics_Composition - Fatal编程技术网

Java 组成和泛型

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

我试图解决这种“组合+泛型”的情况,并使PostCompany.send(msg)与传递/注入到类中的类型兼容

由于Fexed的send方法需要字符串作为参数,而FeexPlus需要整数,我可以做些什么来允许Fedex和FedexPlus在PostCompany类中用作泛型类型

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) {