gpt4 book ai didi

java - Java 语言规范示例 8.1.2-1(相互递归类型变量边界)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:21 25 4
gpt4 key购买 nike

我正在阅读 jls 8我卡在了Example 8.1.2-1 , Mutually Recursive Type Variable Bounds我搜索了stackoverflow,发现了一个问题what is a mutually recursive type?但这与 Java 无关。

示例 8.1.2-1。相互递归类型变量边界

interface ConvertibleTo<T> {
T convert();
}
class ReprChange<T extends ConvertibleTo<S>,
S extends ConvertibleTo<T>> {
T t;
void set(S s) { t = s.convert(); }
S get() { return t.convert(); }
}

问题:

  • Java 中的递归类型相互递归类型是什么意思?

  • 这里是什么 T extends ConvertibleTo<S>, S extends ConvertibleTo<T>方法?

  • 如果我只使用 T extends ConvertibleTo<S>作为类 ReprChange 的类型参数 我遇到编译时错误?

最佳答案

递归类型和相互递归类型在 Java 中是什么意思?

递归类型是在其定义中使用自身的类型。最简单的例子就是链表:

class List<T> {
T value;
List<T> next;
}

这里,List 是递归定义的,因为它在自己的定义中使用了 List

类型变量绑定(bind)( extends Foo 中的 Foo)如果引用自身则为递归,例如

class Bar<T extends Comparable<T>>

这意味着类 Bar 需要一个可以与 T 进行比较的参数 T,因此 T 在其自己的定义中引用了自身。

两个事物之间的相互递归意味着它们在定义中相互引用。在这种情况下,S的定义使用T,T的定义使用S,因此它们的定义是相互递归的。

这里 T extends ConvertibleTo, S extends ConvertibleTo 是什么意思?

S和T是两个类型,S以T为类型参数值扩展接口(interface)ConvertibleTo,T以S为参数值扩展接口(interface)ConvertibleTo。这意味着 S 有一个方法 T convert(),T 有一个方法 S convert()。换句话说,您可以将任何 S 转换为 T,将任何 T 转换为 S。

如果我只是使用 T extends ConvertibleTo 作为 ReprChange 类的类型参数,我会遇到编译时错误吗?

是的,因为您的定义提到了一个从未定义过的名为 S 的类型参数。

关于java - Java 语言规范示例 8.1.2-1(相互递归类型变量边界),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23248103/

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