这些通用陈述之间的差异

时间:2016-07-26 02:30:05

标签: java generics

这两个通用陈述有什么区别?它们似乎做同样的事情,它似乎在编译时没有任何影响,因为我可以互换地使用它们而没有错误。

class Foo {

}

class FooBar extends Foo {

}


interface FooService {

    Set<? extends Foo> getFooObject();

    <T extends Foo> Set<T> getFooObjectAlternative();

}

class FooServiceImpl implements FooService {

    @Override
    Set<FooBar> getFooObject() {
        // works
    }

    @Override
    Set<FooBar> getFooObjectAlternative() {
        // works but you get a warning
    }

    @Override
    Set<Integer> getFooObjectAlternative() {
        // works for some reason!
    }

}

0 个答案:

没有答案