我有一个我不懂的Java问题。我知道还有其他方法可以循环遍历列表,转换对象等以便它可以工作,但我想 unterstand 为什么这在Java中不起作用。 我是高级Java开发的新手。但是我知道泛型的处理方式与C#中的处理方式不同,并且如果指定,则编译为对象或绑定类型。我定义了以下接口:
public interface Test<S extends AnyInterface> {
List<Item> getItems();
S getGeneric();
}
其中Item是一个类。
某些类使用特定的tpye实现此接口:
public class TestImpl implements Test<AnyInterfaceImpl> {
@Override
public List<Item> getItems() { ... }
@Override
public AnyInterfaceImpl getGeneric() { ... }
}
现在我的问题是,当我想用普通的foreach循环遍历项目列表时,我得到一个不兼容的类型错误,因为getItems返回一个Objects而不是Items的列表。
public static void main(String[] args) {
Test test = new TestImpl();
for (Item item : test.getItems()) {
}
}
同样,我不想知道如何解决这个问题,我知道还有其他方法可以使用迭代器,强制转换器或者类似的东西。我只是想知道为什么Java无法处理循环中的Item列表。我不明白为什么它不能直接读取指定类/类型的列表,因为在我看来泛型类型根本不影响这个列表。
修改 为清楚起见,该项目规定如下:
public class Item {
}