gpt4 book ai didi

java - 为什么这个@Override 不正确?

转载 作者:行者123 更新时间:2023-11-29 05:28:33 25 4
gpt4 key购买 nike

我想从 Apache Commons BeanUtils 实现以下接口(interface):

public interface Converter {
// Convert the specified input object into an output object of the specified type
<T> T convert(java.lang.Class<T> tClass, java.lang.Object o);
}

我的实现应该采用 Enum 的子类并将 String 对象转换为指定类型的枚举。我试图使用以下声明:

class EnumConverter implements Converter {
@Override
public Enum convert(Class<Enum> tClass, Object o) {
...
}
}

但是编译器不同意我的看法。它输出:

error: EnumConverter is not abstract and does not override abstract method convert(Class,Object) in Converter

error: name clash: convert(Class,Object) in EnumConverter and convert(Class,Object) in Converter have the same erasure, yet neither overrides the other

error: method does not override or implement a method from a supertype

我的实现有什么问题?

更新。请更仔细地阅读问题。我无法更改 Apache Commons BeanUtils 库中的 Converter 接口(interface)。

最佳答案

你的 convert EnumConverter 中的方法不像 convert 那样通用Converter 中的方法是通用的。如果要实现的方法定义了自己的类型参数,那么覆盖方法也必须这样做。

但是,看起来您需要泛型类型参数为 Enum .如果是这样,那么接口(interface)Converter必须是通用的,而不是方法。 convert方法将引用其接口(interface)的泛型类型参数,而不是定义它自己的。

interface Converter<T> {
// Convert the specified input object into an output object of the specified type
T convert(java.lang.Class<T> tClass, java.lang.Object o);
}

然后你可以指定Enum在实现接口(interface)时。

class EnumConverter implements Converter<Enum>{
@Override
public Enum convert(Class<Enum> tClass, Object o) {
...
}
}

如果您不能更改接口(interface),那么您必须使用相同的泛型方法实现泛型方法。您不能添加任何边界,例如 <T extends Enum<T>> .

class EnumConverter implements Converter{
@Override
public <T> T convert(Class<T> tClass, Object o) {
...
}
}

如果你希望它只与枚举一起工作,那么你必须在运行时强制执行它:

if (!Enum.class.isAssignableFrom(tClass))
throw new IllegalArgumentException("Class must specify an Enum!");

关于java - 为什么这个@Override 不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21892961/

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