java - 如何在方法签名中使用泛型类型?

标签 java generics types

我有这个签名

public final <T1 extends Pair<Pair<T3, T4>, Pair<T3, T4>>,
              T3 extends Enum<MyConstant>,
              T4 extends BigDecimal>
        void doSomething(final int number, final T1 pair);

我可以这样使用它

Pair<Pair<MyConstant, BigDecimal>, Pair<MyConstant, BigDecimal>> pair = 
    new Pair<Pair<MyConstant, BigDecimal>, Pair<MyConstant, BigDecimal>>(
        new Pair<MyConstant, BigDecimal>(const1, value1),
        new Pair<MyConstant, BigDecimal>(const2, value2));
_myObject.doSomething(1, pair);

我想要这个签名,但它不起作用:

public final <T1 extends Pair<T2, T2>,
              T2 extends Pair<T3, T4>,
              T3 extends Enum<MyConstant>,
              T4 extends BigDecimal>
        void doSomething(final int number, final T1 pair);

我收到此错误:

Bound mismatch: The generic method doSomething(int, T1) of type
MyObject is not applicable for the arguments (int,
Pair<Pair<MyConstant,BigDecimal>,Pair<MyConstant,BigDecimal>>). The
inferred type Pair<MyConstant,BigDecimal> is not a valid substitute
for the bounded parameter <T2 extends Pair<T3,T4>>

最佳答案

如果我正确理解你想要做什么,这应该有效:

public final <T1 extends Pair<? extends Pair<? extends Enum<MyConstant>, 
                                             ? extends BigDecimal>, 
                              ? extends Pair<? extends Enum<MyConstant>, 
                                             ? extends BigDecimal>>>
    void doSomething(final int number, final T1 pair);

我只是希望我的大括号正确匹配;-)

关于java - 如何在方法签名中使用泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17106017/

相关文章:

java - processBuilder 无法在不同主机上加载数据?

Java 泛型类标记

python - 在使用 `types.new_class` 创建的类上设置模块

php - 如何配置 php_codesniffer 以强制 PHP 7.4 属性类型声明?

java - 如何在 createStartScripts 任务中更改 unixStartScriptGenerator.template 以便 distTar 在 build.gradle 中使用我的自定义模板文件?

java - 绑定(bind)枚举以在 Play 中形成 <select> 元素!框架 2.1

java - 获取不受支持的字段 : DayOfMonth while using DateTimeFormatter in Java Spring Boot

Python:输入一个接收类型并返回该类型实例的通用函数

javascript - typescript :注入(inject)泛型并获取 ES6 模块名称

elasticsearch - 是否可以在Elastic Search中使用简单查询字符串查询来设置TYPE参数