SuiteClasses语法的Java JUnit类数组

SuiteClasses语法的Java JUnit类数组,java,generics,junit,Java,Generics,Junit,目前我有以下代码来测试我的类 @RunWith(Suite.class) @SuiteClasses( { MyClass.class, MyNewClass } ) public class AllTests { public static void suite() { } } 我想做的是以下内容,但它在语法上不正确-正确的格式是什么 Class<?>[] classArray = new Class<?>[] { M

目前我有以下代码来测试我的类

@RunWith(Suite.class)
@SuiteClasses( { MyClass.class, MyNewClass } )
public class AllTests {
    public static void suite() {        
    }
}
我想做的是以下内容,但它在语法上不正确-正确的格式是什么

 Class<?>[] classArray = new Class<?>[] {
        MyClass.class, MyNewClass.class
  };

 @RunWith(Suite.class)
    @SuiteClasses( classArray  )
    public class AllTests {
        public static void suite() {        
        }
    }

不幸的是你不能。注释需要采用编译时常量,因此您必须使用{MyClass.class,MyNewClass.class}。

不幸的是,您不能。注释需要采用编译时常量,因此必须使用{MyClass.class,MyNewClass.class}。

由SCJP研究指南中的K.Sierra编写: 请记住,通配符只能用于引用声明 包括参数、变量、返回类型等。它们不能用作 创建新类型集合时键入参数。想想看 引用可以是抽象的和多态的,创建的实际对象必须是 具体类型

问题:无法在对象创建中使用通配符表示法。所以 新的ArrayList将不会编译

编辑: @artbristol指出了另一个问题,即传递给注释的编译时常量。看看这个帖子中的回复,它们可能会有帮助。其中一个建议使用ENUM作为解决方法。

由SCJP研究指南中的K.Sierra编写: 请记住,通配符只能用于引用声明 包括参数、变量、返回类型等。它们不能用作 创建新类型集合时键入参数。想想看 引用可以是抽象的和多态的,创建的实际对象必须是 具体类型

问题:无法在对象创建中使用通配符表示法。所以 新的ArrayList将不会编译

编辑: @artbristol指出了另一个问题,即传递给注释的编译时常量。看看这个帖子中的回复,它们可能会有帮助。其中一个建议使用ENUM作为解决方法。

--更新--

问题似乎源于注释。注释需要编译时常量,这意味着您无法以可能需要您重新分配数组或在注释方法访问它之前修改数组的方式构建类数组

值得赞扬的是,阿特布里斯托尔指出了显而易见的事实。起初我走错了路,试图找出为什么你的数组在我的1.7环境中编译

实际上,当考虑到注释是为了通过声明方式扩展java编程时,对注释的编译时常量限制是非常有意义的

--原职--

与其尝试使用通配符,不如使用

 Class<Object>[] classArray = new Class<Object>[] { .... };
它半违背了泛型的目的,因为一切都是从对象扩展而来的;但是,它将满足您对it的任何需求。

--Update--

问题似乎源于注释。注释需要编译时常量,这意味着您无法以可能需要您重新分配数组或在注释方法访问它之前修改数组的方式构建类数组

值得赞扬的是,阿特布里斯托尔指出了显而易见的事实。起初我走错了路,试图找出为什么你的数组在我的1.7环境中编译

实际上,当考虑到注释是为了通过声明方式扩展java编程时,对注释的编译时常量限制是非常有意义的

--原职--

与其尝试使用通配符,不如使用

 Class<Object>[] classArray = new Class<Object>[] { .... };

它半违背了泛型的目的,因为一切都是从对象扩展而来的;但是,它将满足您需要的任何信息技术要求。

尝试删除泛型尝试删除泛型这是正确的答案。这是关于向注释提供什么,而不是如何声明数组变量。这是正确的答案。这是关于向注释提供什么,而不是如何声明数组变量。