了解为什么Java通用接口无法遍历类型列表

时间:2017-10-17 09:21:01

标签: java generics foreach interface

我有一个我不懂的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 {
}

0 个答案:

没有答案