Java 为什么这个@Override不正确?

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); } 公共接口转换器{ //将指定的输入对

我想从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);
}
公共接口转换器{
//将指定的输入对象转换为指定类型的输出对象
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!");