gpt4 book ai didi

java - 通用类枚举返回类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:06 25 4
gpt4 key购买 nike

我定义了一个转换器接口(interface)和几个转换器:

public interface StringConverter<T> {
T convert(String value);
}

public class EnumConverter<E extends Enum<E>> implements StringConverter<E>{

private final Class<E> enumClass;

public EnumConverter(Class<E> enumClass) {
this.enumClass = enumClass;
}

@Override
public E convert(String value) {
return Enum.valueOf(enumClass, value);
}
}

public class IntegerConverter implements StringConverter<Integer> {

public Integer convert(String value) {
return Integer.parseInt(value);
}

}

我创建了一个返回 StringConverter 类的工厂接口(interface)。

public interface StringConverterClassFactory {
<T> Class<? extends StringConverter<T>> getConverter(Class<T> forType);
}

我在 StringConverterClassFactory 实现方面遇到了问题。

public class DefaultConverterClassFactory implements StringConverterClassFactory {

@Override
public <T> Class<? extends StringConverter<T>> getConverter(Class<T> forType) {
if(forType.equals(int.class) || forType.equals(Integer.class))
return (Class<? extends StringConverter<T>>)IntegerConverter.class;
else if(forType.isEnum())
return (Class<? extends StringConverter<T>>)EnumConverter.class;
else
return null;
}
}

导致两个转换器的编译错误,即 incompatible types: Class<IntegerConverter> cannot be converted to Class<? extends StringConverter<T>> .

使用原始类型我可以摆脱 IntegerConverter 编译错误,但对于 EnumConverter 我仍然会遇到同样的错误。 error: incompatible types: Class<EnumConverter> cannot be converted to Class<? extends StringConverter<?>>

public class DefaultConverterFactory implements StringConverterClassFactory {

@Override
public Class<? extends StringConverter<?>> getConverter(Class forType) {
if(forType.equals(int.class) || forType.equals(Integer.class))
return IntegerConverter.class;
else if(forType.isEnum())
return (Class<? extends StringConverter<?>>) EnumConverter.class;
else
return null;
}
}

如有任何帮助,我们将不胜感激。

最佳答案

你可以这样做:

@SuppressWarnings({ "unchecked", "rawtypes" })
public <T> Class<? extends StringConverter<T>> getConverter(Class<T> forType) {
if (forType.equals(int.class) || forType.equals(Integer.class)) {
return (Class) IntegerConverter.class;
} else if (forType.isEnum()) {
return (Class) EnumConverter.class;
} else {
return null;
}
}

关于java - 通用类枚举返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36734184/

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