我有一个班级MyObject<T>
和一个列表:List<MyObject<?>>
。
列表内容(示例):
MyObject<Date>();
MyObject<Integer>();
然后MyObject<T>
类包含一个函数:
public T getValue() {
return this.someAttribute;
}
如何迭代我的List并调用getValue方法?
答案 0 :(得分:1)
for (myObject<?> obj : aList) {
obj.getValue();
}
答案 1 :(得分:1)
List<Myclass<?>> t = new ArrayList<Myclass<?>>();
Iterator<Myclass<?>> iter = t.iterator();
while (iter.hasNext()) {
Myclass<?> next = iter.next();
Object value = next.getValue();
System.out.println(value);
}
答案 2 :(得分:0)
试试这个
for (MyObject obj : yourList){
T value = obj.getValue();
}
答案 3 :(得分:0)
关键是,项目的结果应该是特定于类型的。它是解析框架的一部分。
结果不能是特定于类型的,因为您的列表包含参数化MyObject
(注意的混合物,我从现在开始使用大写符号...)。结果将是Object
类型,您必须使用instanceof
并投射。
示例代码:
public class MyObject<T> {
private T value;
public T getValue() {return value;}
// ...
}
现在我们制作一个列表摘录:
List<MyObject<?>> list = new ArrayList<MyObject<?>>(){
new MyObject<Integer>(), new MyObject<String>()};
for (MyObject<?> item:list) {
Object itemValue = list.getValue();
}
从这个示例中我们看到我们无法转换为除Object
之外的任何其他类型 - 因为该集合包含MyObject
个方法返回getValue()
或{的Integer
个实例{1}}。
答案 4 :(得分:0)
调用方法没有问题,问题是你需要对返回值做什么。
for (MyObject<?> obj : aList)
call( obj );
static <T> call(MyObject<T> obj)
{
T val = obj.getValue();
}
由于通配符捕获,我们可以将MyObject<?>
至call()
方法作为MyObject<T>
arg提供。