我仍然试图利用Java的泛型来解决问题.使用类型集合我没有任何问题,但其余的大部分似乎都让我感到厌烦.
现在我正在尝试使用JUnit"PrivateAccessor",它需要一个Class []参数,其中包含被调用的私有方法的所有参数类型的列表.在Java 1.4中,我将其定义为
Class[] args = new Class[] { Collection.class, ArrayList.class };
但实际的代码定义为现在采用参数
myMethod(Collectionfirst, ArrayList second)
我试图改变args的定义
Class extends Object>[] args = new Class extends Object>[] { Collection.class, ArrayList .class };
但Eclipse在结束时给出了一个红色标记,并表示它在此时期待"无效".我可以使用泛型来做这件事,还是不应该打扰?
你遇到的第一个问题是你应该使用
Class>[] args = new Class[]
代替
Class extends Object>[] args = new Class extends Object>[]
这解释了原因.
你的第二个问题是你应该使用
{ Collection.class, ArrayList.class };
代替
{ Collection.class, ArrayList .class };
这是因为在执行类型擦除之后,在运行时计算了XXX.class ,因此指定类型参数是无用的,因此是禁止的.
我强烈推荐常见问题解答,我将上面的两个解释与上面的两个解释相关联,以便对Java泛型进行"地球上"的解释,这将澄清大多数问题.