0

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

当我使用通配符或不包含通配符时,我总是会收到一个烦人的警告,所以我想了解为什么 Class 值得一个维度,即使我完全不知道它是如何使用的。

4

1 回答 1

2

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

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

List如果您传递一个类不扩展的对象YourClass(让我们这样称呼它,而不是),则不会编译A

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

编辑:既然你说你想传递一个类列表,那么这应该工作:

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

    }
}
于 2013-03-13T18:13:06.537 回答