java - Java 类构造函数中尖括号的用途是什么?

标签 java class generic-type-argument

我想要方法public void x(List<Class<some expression>> m)如果您尝试传递不扩展 class A{} 的类,则会抛出错误将“某些表达式”替换为...某些表达式。

当我使用通配符或不包含通配符时,我总是会收到恼人的警告,因此我想了解为什么 Class 值得拥有一个维度,即使我对它的使用方式完全不了解。

最佳答案

我不太明白你想做什么。实际上,这个方法签名:

public void x(List<? extends YourClass> m)

如果您传递一个List对象,其类不扩展YourClass(我们这样调用它,而不是A),则不会编译)。

如果您希望 x 方法获取 Class 对象列表作为参数,那是另一个问题。您确定不愿意只传递扩展 YourClass 的类的对象 List 吗?如果是这样,该方法签名应该可以工作。

编辑:既然您声明要传递类列表,那么这应该可行:

public void x(List<Class<? extends YourClass>> m)

这样测试:

import java.util.*;

class YourClass {}
class YourClassEx extends YourClass {}

public class Test {

    public static void x(List<Class<? extends YourClass>> m) {
        // stuff...
    }

    public static void main(String[] argv) {

        List<Class<? extends YourClass>> list = new ArrayList<>();
        list.add(YourClass.class);
        list.add(YourClassEx.class);
        x(list); // compiles fine until here

        list.add(String.class); // doesn't compile
        x(new ArrayList<Class>()); // doesn't compile, either

    }
}

关于java - Java 类构造函数中尖括号的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15393176/

相关文章:

java - Glassfish 3.1.1 重新部署时出错

java - context=this 让我的应用程序停止工作

javascript - 选择数组中的所有值

扩展类中的PHP依赖注入(inject)

参数的java通用类型与抽象类

java - Java泛型中的 "super"关键字有什么问题

java - 如何使用 java 驱动程序使用两个 "where"条件更新 MongoDB 中的数组项

java - 单击时更改按钮颜色

c# - 内部类需要访问外部类。好吗?

类型别名声明中的 Haskell 类型类