我的目标是实现一个接受类实例的操作,但前提是具体传递的类继承自Collection。
我在无法解决的代码上收到编译器警告。
package com.fun.with.generics;
import java.util.ArrayList;
import java.util.Collection;
public class AcceptTypedClass
{
// Warning here on 'Collection': ... raw type, references should be parameterized.
private static void printCollectionClass( Class<? extends Collection> c )
{
System.out.println( c.getName() );
}
public static void main( String[] args )
{
// Warning here on ArrayList: ... raw type, references should be parameterized.
Class<ArrayList> arrayList = ArrayList.class;
printCollectionClass( arrayList );
}
}
我确实理解警告消息,但是如果我通过添加缺少的类型参数(如下所示)来修复警告,则会出现错误。
Class<ArrayList<?>> arrayList = ArrayList.class;
有人可以解释吗?问题是我是否可以编写上面的代码,以便没有任何警告(并且该代码有效)?
您可以将printCollectionClass
方法更改为
private static <T extends Collection<?>> void printCollectionClass(Class<T> c) {
System.out.println(c.getName());
}
public static void main(String[] args) {
printCollectionClass(ArrayList.class);
}
这里printCollectionClass
将接受从collection继承的类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句