Java 为什么这个@Override不正确?
我想从Apache Commons BeanUtils实现以下接口:Java 为什么这个@Override不正确?,java,enums,overriding,Java,Enums,Overriding,我想从Apache Commons BeanUtils实现以下接口: 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); } 公共接口转换器{ //将指定的输入对
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);
}
公共接口转换器{
//将指定的输入对象转换为指定类型的输出对象
T convert(java.lang.Class tClass,java.lang.Object o);
}
我的实现应该采用Enum的子类,并将String对象转换为指定类型的Enum。我试图使用以下声明:
class EnumConverter implements Converter {
@Override
public Enum convert(Class<Enum> tClass, Object o) {
...
}
}
类EnumConverter实现转换器{
@凌驾
公共枚举转换(类tClass,对象o){
...
}
}
但是我不同意。它输出:
错误:EnumConverter不是抽象的,并且不重写抽象
转换器中的方法转换(类、对象)
错误:名称冲突:
EnumConverter中的转换(类、对象)和
Converter中的convert(类、对象)具有相同的擦除,但
两者都不凌驾于对方之上
错误:方法不重写或
从超类型实现方法
我的实现有什么问题
UPD。请仔细阅读这个问题。我无法更改Apache Commons BeanUtils库中的转换器接口。您在
EnumConverter
中的convert
方法不是泛型的,就像convert
中的convert
方法是泛型的一样。如果要实现的方法定义了自己的类型参数,那么重写方法也必须这样做
但是,看起来您需要泛型类型参数是Enum
。如果是,那么接口转换器必须是通用的,而不是方法。convert
方法将引用其接口的泛型类型参数,而不是定义自己的泛型类型参数
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);
}
如果无法更改接口,则必须使用相同的泛型方法实现泛型方法。您不能添加任何边界,例如
您还需要使接口通用。@DaveNewton“我想从Apache Commons BeanUtils实现以下接口”。它是一个第三方库,我无法更改它。您能为我的案例编写正确的类定义吗(不更改转换器接口)?我无法更改转换器接口。太好了。谢谢你的详细回答。
class EnumConverter implements Converter<Enum>{
@Override
public Enum convert(Class<Enum> tClass, Object o) {
...
}
}
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!");