使用子类型作为类中的类型参数



考虑以下代码片段

    public static <T> String typeName1(Class<T extends Object> c) {
        return c.getSimpleName();
    }
    public static  String typeName2(Class<? extends Object> c) {
        return c.getSimpleName();
    }

第一个显示编译时错误,而第二个则成功编译。为什么会这样?

将第一个更改为:

public static <T extends Object> String typeName(Class<T> c) {
    return c.getSimpleName();
}

它会起作用的。这就是你在哪里出界的区别。对于类型参数,您可以在声明类型参数的地方声明边界,而不是在使用它的地方。而对于通配符,由于没有这样的声明,您可以将边界指定为使用它的位置。顺便说一句,<T extends Object>可以只是<T>

public static <T> String typeName(Class<T> c) {
    return c.getSimpleName();
}

相关内容

  • 没有找到相关文章

最新更新