这是我的代码:
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来自何处.
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |