Zoe*_*wll 7 java generics type-constraints type-parameter
我有一个Either<L, R>类,它表示两种类型之一的值或语义上不同的状态。在某些情况下,无论值是哪种选择,对其进行操作都是有价值的。
我想要(非静态)方法,它接受Consumer<T>,那里T是两者的超类型L和R,其中L和R是类的类型的参数。
目前,java让我这样做:(静态实现)
public static <T, L extends T, R extends T> void collapse(Either<L,R> e, Consumer<T> op)
Run Code Online (Sandbox Code Playgroud)
但是,当然,对于非静态实现,我不能对L和施加约束R,因为已经为所讨论的实例定义了约束。我需要施加这些约束T,但是java不允许我编写以下内容,因为它一次只允许一个类在超类型或子类型约束中。鉴于所有类都至少共享Object一个共同的超类型,这尤其令人沮丧,因此这些约束始终可以满足。
public void collapse(Consumer<? super L & R> op)
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以定义此约束,在更高版本的Java中允许使用此约束的任何提示,还是对为什么它将成为破坏性功能的任何解释?
也许您应该添加T作为类的第三个类型参数:
class Either<T, L extends T, R extends T>
{
public void collapse(Consumer<T> op) {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |