类型中的方法func(List <object>)不适用于参数(List <string>)</string> </object>

时间:2013-12-03 15:58:36

标签: java generics collections

我已经尝试了这两段代码,但我两者都遇到了错误。 下面附有两件作品和我得到的两个错误。 如果发生这种情况,我将不胜感激。

示例1

static List<String> list = new ArrayList<String>();

public static void main(String[] args) {    
  func(list);    
}

private static void func(List<Object> lst) {                
}

错误:

  

The method func(List<Object>) in the type is not applicable for the arguments (List<String>)

示例2

static List<Object> list = new ArrayList<Object>();

public static void main(String[] args) {
    func(list);    
}

private static void func(List<String> lst) {
}           

错误:

  

The method func(List<String>) in the type is not applicable for the arguments (List<Object>)

4 个答案:

答案 0 :(得分:6)

该方法不适用,因为StringObjectList<String>不是List<Object>

答案 1 :(得分:2)

为什么您无法将List<String>传递给List<Object>

void bong(List<Object> objs) {
    objs.add ( new Integer(42) );
}
List<String> strings = Arrays.toList("foo", bar");
bong(strings);    // not allowed because ... see next line
for (String s : strings) print(x.charAt(0));

仅当方法无法修改传递的列表时,这才是安全的。不幸的是,大多数Java类都是可变的,大多数列表实现也是如此。

为什么您无法将List<Object>传递给List<String>

void bing(List<String> strings) {
    for (String s : strings) print(x.charAt(0));
}
bing(Arrays.toList((Object)1,(Object)2,(Object)3));

答案 2 :(得分:0)

static List<Object> list = new ArrayList<Object>();

public static void main(String[] args) {

    func(list);

}

private static void func(List<Object> lst) {

}

这应该与使用正确的导入(java util)。

您无法向参数List<Object>的方法提供List<String>。它只能使用相同的类型参数。

答案 3 :(得分:0)

您应该基本了解泛型的用途及其工作原理:

List<String> list = new ArrayList<String>();

表示此列表只能包含字符串列表,并且只能传递给接受类型List<String>的参数的方法。而且你不能用List <Object>代替它。

为了使功能更通用,您可以使用:

function (List<?> list) {
    //body
}