如何使用通用参数

时间:2019-01-23 19:52:52

标签: java generics

我来自Java语言背景,在处理Java强类型时遇到了麻烦,尤其是在尝试创建泛型类时。

说我有一个名为Signal的类,该类接受一个引用和一个有效负载作为参数。引用将始终为String类型,但是有效负载的类型可能会有所不同。

我想保持有效载荷的类型通用,以便能够将各种类传递给它。但是,如果我理解正确的话,Java不允许我声明通用字段!?

那我该怎么办呢?

下面是我所想到的一个简单示例。 我的自定义“ <#>”符号是我遇到麻烦的地方。 如何用一些适当的通用语法替换它?

class Signal {

    String ref;
    <#> payload;

    public Signal(String ref, <#> payload) {
        this.ref = ref;
        this.payload = payload;
    }
}

还是我会以错误的方式进行操作?

有没有更好的方法来处理类型未知的参数?

感谢所有信息!

1 个答案:

答案 0 :(得分:1)

Java确实允许使用通用字段。您正在寻找:

class Signal <T> { // notice the generic introduction here: <T>

    String ref;
    T payload; // now we can use T to represent any generic type

    public Signal(String ref, T payload) { // same here
        this.ref = ref;
        this.payload = payload;
    }
}

请注意,T可以是任何可行的名称(类似于引用的命名规则)。

用法:

Signal<Double> first = new Signal<>("foo", 2.0);
Signal<String> second = new Signal<>("foo", "bar");