这是我的代码:
public class Sequence<T> {
protected List<T> sequence = new ArrayList<T>();
public Matrix<OrderedPair<T, ?>> createCartesianProduct(Sequence<?> secondSequence) {
Matrix<OrderedPair<T, ?>> result = new Matrix<OrderedPair<T, ?>>();
for (int rowIndex = 0; rowIndex < sequence.size(); rowIndex++) {
Sequence<OrderedPair<T, ?>> row = new Sequence<OrderedPair<T, ?>>();
for (int columnIndex = 0; columnIndex < secondSequence.length(); columnIndex++) {
row.add(new OrderedPair(sequence.get(rowIndex), secondSequence.sequence.get(columnIndex)));
}
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
这在Eclipse中编译,但是在内部for循环(row.add(...))内的行上我得到以下三个警告:
OrderedPair
是一种原始类型.OrderedPair()<T1, T2>
应参数化对泛型类型的引用.OrderedPair<T, ?>
<T1, T2>
应参数化对泛型类型OrderedPair的引用我想使用泛型来强制执行强类型检查,但我想我对泛型的理解不足以让我看到如何.有人可以教育我吗?
谢谢,
- 肯
内部for循环中的构造函数应该具有泛型:
row.add(new OrderedPair <T, ?> (sequence.get(rowIndex), secondSequence.sequence.get(columnIndex)));
但你不能这样使用?
; 所以你需要?
用字母替换所有的s,比方说E
.然后<E>
在签名中添加一个,如下所示:
public <E> Matrix<OrderedPair<T, E>> createCartesianProduct(Sequence<E> secondSequence) {
否则,编译器将不知道它E
来自何处.