请参阅 Java Enum定义 和 [为什么在Java中将枚举声明为Enum <E扩展Enum <E
](http://codingdict.com/questions/131394)
进行一般性讨论。在这里,我想了解如果将Enum类定义为以下内容,则会被完全破坏(不再是类型安全的,或者需要其他强制转换等)
public class Enum<E extends Enum>
我正在使用以下代码测试我的想法:
interface MyComparable<T> {
int myCompare(T o);
}
class MyEnum<E extends MyEnum> implements MyComparable<E> {
public int myCompare(E o) { return -1; }
}
class FirstEnum extends MyEnum<FirstEnum> {}
class SecondEnum extends MyEnum<SecondEnum> {}
有了它,我无法在这种确切的情况下找到任何好处。
PS。我不允许这样做的事实
class ThirdEnum extends MyEnum<SecondEnum> {}
当使用递归定义MyEnum时
a)不相关,因为使用真正的枚举不被允许这样做,只是因为您不能自己扩展枚举
b)不正确-请在编译器中尝试一下,看看实际上是能够编译没有任何错误
PPS。我越来越倾向于认为,正确的答案是“如果删除递归部分,什么也不会改变”-但我简直不敢相信。
我相信这样做的一个令人信服的理由是,它使MyEnum类中的代码更具类型安全性。
考虑到递归部分使这种事情成为可能:
class MyEnum<E extends MyEnum<E>> {
private Thing<E> util1() { return someObject }
private void util2(E e) {}
public int method(E o) {
Thing<E> thingy = o.util1();
// You can call the util1 method on o and get a type safe return element.
E o1 = // I don't care how you get a parametrized E object.
o.util2(o1);
// You can call the util2 method with a typesafe parameter.
}
}
简而言之,该递归使您可以将类型安全方法放在可以在任何E元素上调用的Enum类中,这些调用将是类型安全的。
问题内容: 如果语言设计者仅使用Enum 会对语言产生怎样的影响? 现在唯一的区别是有人会写 A扩展 但由于Java中不允许扩展枚举,因此仍然是非法的。我也在考虑为jvm提供一个字节码,该字节码将smth定义为扩展枚举-但是泛型不会受到影响,因为它们都被删除了。 那么,声明的重点是什么? 谢谢! 编辑 为简单起见,让我们来看一个例子: 这个类结构有什么问题?限制可以做什么? 问题答案: 这是一个普
问题内容: 以下方法不起作用,因为内部块声明的变量与外部块中的变量同名。显然,变量属于声明它们的方法或类,而不属于声明它们的块,因此,我无法编写一个简短的临时临时块进行调试,而恰好将外部作用域中的变量压入阴影只是片刻: 我使用过的几乎每种块范围语言都支持此功能,包括我在学校为解释器和编译器编写的琐碎小语言。Perl可以做到这一点,Scheme甚至C都可以做到。甚至PL / SQL也支持这一点! J
递归 enum 递归枚举是拥有另一个枚举作为枚举成员关联值的枚举. 当编译器操作递归枚举时必须插入间接寻址层. 你可以在声明枚举成员之前使用indirect关键字来明确它是递归的. e.g. 表达式(5+4)*2 indirect enum ArithmeticExpression { case number(Int) case addition(ArithmeticExpress
问题内容: 我要选择不是特定类后代的跨度,我们称其为“否”。这是我的CSS: 这是HTML 两个问题: 为什么我的CSS同时适用于是1和否2? 如果切换到通用选择器,为什么整个过程都会中断? 问题答案: 元素的两个父元素都不具有class ,无论其他祖先是否都具有class :
我试图表示一个树状递归数据结构,其中每个节点可能是两种不同数据类型中的一种。我使用boost变体来“容纳”可能出现在每个节点上的两种类型。 但是,我遇到了一个问题。我严格使用“using”指令声明所有这些类型,因此当我到达节点的递归性质时,它会失败,因为typedef/using可能不会使用递归。 如何做到这一点? 我已经探索过使用boost::make_recursive_variant,但它创
本文向大家介绍render函数中return如果没有使用()会有什么问题?相关面试题,主要包含被问及render函数中return如果没有使用()会有什么问题?时的应答技巧和注意事项,需要的朋友参考一下 我们在使用JSX语法书写react代码时,babel会将JSX语法编译成js,同时会在每行自动添加分号(;),如果后换行了,那么就会变成 一般情况下会报错: Nothing was returne