有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何正确指定类<?>使用泛型的参数

我的目标是实现一个接受类实例的操作,但前提是具体传递的类继承自集合

我的代码中出现了编译器警告,我无法解析

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;

有人能解释一下吗?问题是,我是否可以编写上面的代码,这样我就不会收到任何警告(而且代码还能工作)


共 (1) 个答案

  1. # 1 楼答案

    您可以将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将接受从集合继承的类