如何用Java解决泛型类中的泛型方法

时间:2018-10-31 12:31:27

标签: java generics compiler-errors compilation javac

我的同事遇到了一个奇怪的编译器行为,我对此感到非常惊讶。主要问题是如何解析Java中的泛型方法,以及它与类的泛型有何关系。 这是例子。我有一些通用类<T>,它具有通用方法<P>。这两个泛型无关

public class BaseClass<T> {

    public <P extends Iface> P getIface() {
        return null;
    }
}

在这里我们可以看到<P extends Iface>。因此,我应该能够将方法getIface()的结果声明为Iface的子级。像这样:

IfaceImpl impl = new BaseClass<String>().getIface();

目前,它可以正常工作,但是仅在使用通用声明BaseClass之前。如果我省略泛型,则会给我编译错误:

IfaceImpl iface = new BaseClass().getIface();

在这种情况下,我只能将getIface()的结果分配为Impl

Impl iface = new BaseClass().getIface();

因此,基本上,如果我们有一个通用类,并将其定义为原始类型,则将无法解析其上的通用方法。但是为什么呢?似乎不是功能,是否由于某些限制或向后兼容性问题而实现了此行为?

0 个答案:

没有答案