我正在使用Java中的泛型。但是我确实有问题。简而言之,这段代码应该转换一个列表中的一个对象,而不是将其放入另一个列表中。 (从T到U)
我的代码看起来像这样
public class ListConvertor<T, U> {
private final Convertor<T, ? extends U> convertor;
public ListConvertor( Convertor<T, ? extends U> convertor ) {
this.convertor = convertor;
}
public void convertList( List<T> from, List<U> to ) {
if ( from == null )
return;
for ( T ch : from ) {
to.add( convertor.convert( ch ) );
}
}
}
public interface Convertor<T, V> {
V convert( T dataModelObject ) throws JEDXException;
}
对于这样的事情它可以正常工作:
new ListConvertor<>(new IntListConvertor()).convertList(in.getIntLists(), out.getIntLists());
像上面那样使用此代码时,所有操作均正常运行,因为int
和out
getIntList
方法返回List<IntList>
和List<IntListType>
public final class IntListConvertor implements Convertor<IntList, IntListType>
但是我想将它与out参数上的List<Object>
一起使用。所以看起来像这样:
List<Object> outObjectList = new ArrayList<Object>();
new ListConvertor<>(new IntListConvertor()).convertList(in.getIntLists(), outObjectList );
但是当这样使用时,我得到了错误:
The method convertList(List<IntCharacteristic>, List<IntCharacteristicType>) in the type ListConvertor<IntCharacteristic,IntCharacteristicType> is not applicable for the arguments (List<IntCharacteristic>, List<Object>)
答案 0 :(得分:5)
您应该将方法签名更改为
public void convertList(List<T> from, List<U> to)
到
public void convertList(List<T> from, List<? super U> to)
如果U
是Integer
,您现在可以接受以下内容进入列表
List<Integer>
List<Number>
List<Object>
更多小费
您还应该将List<T> from
更改为List<? extends T> from
。这样,如果T为Number
,则可以通过
List<Number>
List<Integer>
List<Double>