java - 组合和泛型

标签 java oop generics composition

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

由于 Fexed 的发送方法需要字符串作为参数,而 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);
    }
}

最佳答案

你错过了海报的类型

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

但实际上只输入对象的类型会更好

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

因为您将始终使用 Poster 的接口(interface)方法

关于java - 组合和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51866396/

相关文章:

java - Java 国际象棋——面向对象与效率

oop - F# 记录与类

swift - 无法使用泛型参数覆盖函数

java - Java 中引用的表示

java - 无法在 spring-data 中写入正确的请求

java - 为什么我们在 Java 中实例化一个新对象时必须键入两次类名?

java - "public class Nir<E>"是什么意思?

Python 重载 __init__

java - 针对 XML 架构(XSD 文件)的通用 XML 文件 validator

java - 使用 tagsoup 构建 DOM 文档