首页 > 解决方案 > 类型交集:在相交类型中使用类型变量

问题描述

我想将方法​​的返回类型声明为类型变量和静态接口(例如java.io.Serializable)的交集。

理想情况下,我希望能够执行以下操作:

public class Main {

    public static <I, T extends I & java.io.Serializable> T foo(I object) {
        return null;
    }
}

但是,此代码给出以下编译错误:

Main.java:3: error: a type variable may not be followed by other bounds
    public static <I, T extends I & java.io.Serializable> T foo(I object) {
                                           ^
1 error

根据Java type intersection 的文档,这应该是可能的。

边界的形式受到限制(只有第一个元素可以是类或类型变量,并且边界中只能出现一个类型变量)以排除某些尴尬情况的出现。

错误似乎很清楚,但在文档中却没有提到这样的限制。据我了解,如果类型变量由于需要接口而不能在第一个位置之后出现,并且不能像错误所说的那样跟随任何其他绑定,这意味着类型变量不能在类型交集中使用。

Oracle 文档似乎另有说明。

感谢您的见解。

标签: javagenericsjava-8

解决方案


推荐阅读