Java 泛型参数用法

需要一个函数接受一个Map类型, 类型中的一个类型的具体值可以不需要关心, 所以最好的办法是泛型. 具体的需求是这样, 比如有一个Map:

Map<String, List<Element>> nextLinksCategories = new TreeMap<String, List<Element>>();

需要找出Map中list 的size最大的那一个, 然后返回key String. 首先想到的写法如下:

public static  String findMaxListMap<StringList<?>>  m) {
        int count ;
        String candidate "";
        
        for Map.Entry<StringList<?>> entry m.entrySet()) {
            if entry.getValue().size() > count ) {
                count entry.getValue().size();
                // update candidate
                candidate entry.getKey();
            }
        }
        return candidate;
    }

但是调用的时候提示参数不匹配. 然后又改成

public static  String findMaxList( Map<String, List<? extends Object>>  m)

其实 ? 就等价于 上面的形式. 如果是C++的话, 可能就是这样

template < class T > 
string findMaxList( map<string, vector<T> > m )

Java generic也是类似的语法, 只不过第一时间很容易想到 "?" 通配符上去. 正确写法:

public static  <E> String findMaxList( Map<String, List<E>>  m) {
        int count = 0 ;
        String candidate = "";
        
        for ( Map.Entry<String, List<E>> entry : m.entrySet()) {
            if ( entry.getValue().size() > count ) {
                count = entry.getValue().size();
                // update candidate
                candidate = entry.getKey();
            }
        }
        return candidate;
    }

以我看, Java的语法要简洁的多.