我有一个将字符串转换为对象的类型转换器,反之亦然,类型转换器将本地考虑在内。为了容易地实现几种类型的转换器对于BigDecimal
,Point
等等,我决定将此界面设为通用。
public interface TypeConverter<T extends Object>
{
convertToString(Locale locale, T object);
}
这很好实现,因为你可以确定你只获得所需的T而不必投射或其他东西。
convertToString(Locale locale, BigDecimal bigDecimal) { ... }
要检索正确的转换器,我构建了一个类型转换器存储库,您可以在其中访问特定的类型转换器
typeConverterRepository.getTypeConverter(sourceValue.getType())
类型转换器存储库比给我们正确的类型转换器。
现在我们要调用这个转换器:
TypeConverter typeConverter = typeConverterRepository.get( ....)
typeConverter.convertToString(context.getLocale(), sourceValue.getValue());
这导致了日食警告:
convertToString(Locale, capture#2-of ?)
类型中的方法TypeConverter<capture#2-of ?>
不适用于参数(Locale, Object)
如何在不使用@SupressWarning
注释的情况下修复此问题?谢谢!
答案 0 :(得分:2)
我认为问题出在你的typeConverterRepository模式中。
做一个类似于以下
的转换器public class TypeConverterRepository {
public <T> void registerTypeConverter(Class <T> type, TypeConverter<T> typeConverter);
public <T> TypeConverter<T> getTypeConverter(Class <T> type);
}
然后你可以做一个
TypeConverter<MyClass> typeConverter = typeConverterRepository.getTypeConverter(MyClass.class);