gpt4 book ai didi

java - 如何修复Java中的 "type argument S is not within bounds of type-variable E"

转载 作者:行者123 更新时间:2023-11-30 05:46:54 25 4
gpt4 key购买 nike

我正在尝试通过使用接口(interface)定义一些基本访问方法来对不同的枚举类进行多态访问。例如:

package com.company;

public interface StatesInterface<E extends Enum<E>> {

E getOneState();
E getTwoState();
E getThreeState();
}

以及一些实现:

package com.company;

public enum States implements StatesInterface<States> {

ONE, TWO, THREE, FOUR;

@Override
public States getOneState() {
return ONE;
}
@Override
public States getTwoState() {
return TWO;
}
@Override
public States getThreeState() {
return THREE;
}
}

注意:我知道这段代码有问题,因为接口(interface)通过非静态接口(interface)提供静态枚举值,但我不知道如何解决它。

当我尝试使用此接口(interface)作为类中的类型约束时,出现类型错误。例如:

package com.company;

public class Lifecycle<S extends StatesInterface> {

private S state;

public void transit() {
state = state.getOneState(); // <---- incompatible types
}
}

在这种情况下,我无法分配 state.getOneState();类型 Enumstate类型 StatesInterface<Enum> .

当我尝试将泛型类型更改为 Lifecycle<S extends StatesInterface<S>> 时编译说我Error:(3, 50) java: type argument S is not within bounds of type-variable E .

我的目标是创建一组具有通用接口(interface)的不同枚举类,用于创建泛化类 Lifecycle 的新类。到特定的枚举类型。

是否可以使用提供的代码来实现此目的以及如何修复它?

最佳答案

我认为您正在寻找的是:

class Lifecycle<S extends Enum<S> & StatesInterface<S>>
<小时/>

相比之下,您的定义如下:

interface StatesInterface<E extends Enum<E>>

enum States implements StatesInterface<States>

class Lifecycle<S extends StatesInterface>

然后getOneState()只返回一个类型 Object extends Enum<Object> ,因为您使用的是 StatesInterface原始类型不给它类型参数,这与类型 S extends StatesInterface 不兼容,从而为您提供"Type mismatch: cannot convert from Enum to S"

将定义更改为 class Lifecycle<S extends Enum<S> & StatesInterface<S>>你允许getOneState()返回S extends Enum<S> & StatesInterface<S>这当然可以兼容设置为 S 类型的变量, S state = getOneState()

<小时/>

从中可以得到什么

你应该strive to avoid using raw types因为它们放弃了泛型的类型安全性,并且一般也不会与其他泛型很好地配合,正如您在这里所经历的那样。

关于java - 如何修复Java中的 "type argument S is not within bounds of type-variable E",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54673668/

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