我已经尝试了这两段代码,但我两者都遇到了错误。 下面附有两件作品和我得到的两个错误。 如果发生这种情况,我将不胜感激。
示例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>)
答案 0 :(得分:6)
该方法不适用,因为String
是Object
但List<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
}