gpt4 book ai didi

java - 如何重现可能不是两个参数接口(interface)的子类型的通用接口(interface)类型变量的 java 编译/运行时错误?

转载 作者:行者123 更新时间:2023-11-30 07:58:55 24 4
gpt4 key购买 nike

我正在阅读Java SE 6 specs然后发现了一些我无法重现的令人困惑的东西:

A type variable may not at the same time be a subtype of two interface types which are different parameterizations of the same generic interface.

我编写了以下代码:

interface Odd {}

interface Even {}

interface Strange extends Odd, Even {}

interface InterfaceOne<O extends Odd, E extends Even> {}

interface InterfaceTwo<O extends Odd, E extends Even> extends Odd, Even {}

public class Test {
public static void main(String[] args) {
//Expecting compilation error
InterfaceOne<Strange, Strange> t1 = new InterfaceOne<Strange, Strange>(){};
//Expecting compilation error
InterfaceTwo<Strange, InterfaceTwo> t2 = new InterfaceTwo<Strange, InterfaceTwo>(){};
System.out.println("" + t1 + t2);
}
}

上面的代码应该无法编译,但它确实可以编译。

如何重现规范预测的错误?

最佳答案

据我了解,泛型类型不能绑定(bind)到两个或多个接口(interface),其中这些接口(interface)从使用泛型参数的另一个接口(interface)扩展,并且绑定(bind)的接口(interface)对泛型使用不同的类型。我写了一个这样的例子:

interface Simple<T> { T aMethod(); }
interface SimpleString extends Simple<String> {}
interface SimpleInteger extends Simple<Integer> {}
public class CompilerError {
public <T extends SimpleString & SimpleInteger> void here(T interesting) {
System.out.println(interesting.aMethod());
}
}

使用 javac 1.6.0_32-ea,这给我带来了以下编译器错误

CompilerError.java:5: Simple cannot be inherited with different arguments: <java.lang.String> and <java.lang.Integer>
public <T extends SimpleString & SimpleInteger> void here(T interesting) {
^
1 error

关于java - 如何重现可能不是两个参数接口(interface)的子类型的通用接口(interface)类型变量的 java 编译/运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com