黑马程序员技术交流社区

标题: 类型问题,求解; [打印本页]

作者: 王怡然    时间: 2012-5-11 13:34
标题: 类型问题,求解;
public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  addAll(list, "a", "b", "c", "c", "d", "e");
  addAll(list, "x", "x", "o", "o");
  System.out.println(list);
}
  public static void addAll(List list, Object... arr){ //在这个地方定义的这个Object到底是什么意思?有什么作用?能用其他的吗?
  for (Object obj : arr)
   list.add(obj);    }


代码在上, 求解释,为什么要用Object;

作者: 李啸    时间: 2012-5-11 13:43
public static void main(String[] args) {
   List<String> list = new ArrayList<String>();
   addAll(list, "a", "b", "c", "c", "d", "e");
   addAll(list, "x", "x", "o", "o");
   System.out.println(list);
}
   public static void addAll(List list, Object... arr){ ——这个地方可以换成public static void addAll(List list Object[] obj) 效果是一样的
   for (Object obj : arr)
    list.add(obj);    }


作者: 王怡然    时间: 2012-5-11 13:58
李啸 发表于 2012-5-11 13:43
public static void main(String[] args) {
   List list = new ArrayList();
   addAll(list, "a", "b", " ...

你没有明白我的意思.
我问的是为什么那里要用Object,我能不能吧Object换成其他的,  它在这个地方有什么含义?
作者: 袁冬梅    时间: 2012-5-11 14:03
public static void addAll(List list, Object... arr){
这个是典型的可变参数啊,这个是在JDK1.5之后出现的新特性。
Object 是指代对象,arr是参数名。这三个点的意思是,可以把很多个相同类型的对象放入arr里面,arr其实有点像是一个可变长度的数组。等之后运用的时候就可以直接咦数组下标来取arr中的值
JDK1.5之前,arr其实是一个数组,但是数组的话,我们就需要先给定一个数组,才能把这个数组当做参数传递进来,进行操作。
也就是说,你上面的 "a", "b", "c", "c", "d", "e"这些东东就需要放入一个char[]数组中再传入下面的那个方法中去用
新特性之后,那些字符就可以不用先放入字符数组中啦,你可以随意放入随意个字符,arr会把它们都装进去滴
作者: 于陈    时间: 2012-5-11 14:17
Object... arr    是可变参数,跟你下面用的for in 语句一样,都是jdk1.5之后出现的新东西,这里用Object来定义就实现了多态,作用无非就是可以传多个参数进入你这个函数,当然你也可以用String,因为你上面泛型<String>,但是用Object实现多台有一点好处就是可以传入任意的其它类型的参数,这样你这个方法的复用程度就提高了。
作者: 蒋映辉    时间: 2012-5-11 14:21
王怡然 发表于 2012-5-11 13:58
你没有明白我的意思.
我问的是为什么那里要用Object,我能不能吧Object换成其他的,  它在这个地方有什么含 ...

因为   用Object的话  你可以传多种值进去,比如String  比如int  传进去以后再写一个判断方法就可以了  用instanceof 来判断它是哪种类型 然后执行什么操作
作者: 袁冬梅    时间: 2012-5-11 14:24
王怡然 发表于 2012-5-11 13:58
你没有明白我的意思.
我问的是为什么那里要用Object,我能不能吧Object换成其他的,  它在这个地方有什么含 ...

可以,根据具体情况而定你这里的可以用Character都可以吧。额,你试试?
本来想说char,不过你这里是list,里面只能存储对象,所以,我觉得你改成Character可行,char就不可以了。
你试试吧,应该没问题的。
作者: 黄坚声    时间: 2012-5-11 16:23
public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  addAll(list, "a", "b", "c", "c", "d", "e");
  addAll(list, "x", "x", "o", "o");
  System.out.println(list);
}
  public static void addAll(List list, Object... arr){ //Object... arr 是可变参数,是jdk1.5之后出现的新特性。好处就是可以传入任意的其它类型的参数,这样你这个方法的复用程度就提高
  for (Object obj : arr)
   list.add(obj);    }

作者: 黄坚声    时间: 2012-5-11 16:23
public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  addAll(list, "a", "b", "c", "c", "d", "e");
  addAll(list, "x", "x", "o", "o");
  System.out.println(list);
}
  public static void addAll(List list, Object... arr){ //Object... arr 是可变参数,是jdk1.5之后出现的新特性。好处就是可以传入任意的其它类型的参数,这样//你这个方法的复用程度就提高
  for (Object obj : arr)
   list.add(obj);    }

作者: 黄坚声    时间: 2012-5-11 16:24
public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  addAll(list, "a", "b", "c", "c", "d", "e");
  addAll(list, "x", "x", "o", "o");
  System.out.println(list);
}
  public static void addAll(List list, Object... arr){ /*Object... arr 是可变参数,是jdk1.5之后出现的新特性。好处就是可以传入任意的其它类型的参数,这样你这个方法的复用程度就提高*/
  for (Object obj : arr)
   list.add(obj);    }

作者: 黄坚声    时间: 2012-5-11 16:25
/*Object... arr 是可变参数,是jdk1.5之后出现的新特性。好处就是可以传入任意的其它类型的参数,这样你这个方法的复用程度就提高*/

public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  addAll(list, "a", "b", "c", "c", "d", "e");
  addAll(list, "x", "x", "o", "o");
  System.out.println(list);
}
  public static void addAll(List list, Object... arr){ /*Object... arr 是可变参数,是jdk1.5之后出现的新特性。好处就是可以传入任意的其它类型的参数,这样你这个方法的复用程度就提高*/
  for (Object obj : arr)
   list.add(obj);    }

作者: 小小企鹅    时间: 2012-5-11 16:39
在java类中所有的类都是从Object这个类继承过来的;Object...arr可变参数列表;能用其他的,将Object换String也能通过。
作者: 黄坚声    时间: 2012-5-11 17:28
public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  addAll(list, "a", "b", "c", "c", "d", "e");
  addAll(list, "x", "x", "o", "o");
  System.out.println(list);
}
  public static void addAll(List list, Object... arr){ /*Object... arr 是可变参数,是jdk1.5之后出现的新特性。好处就是可以传入任意的其它类型的参数,这样你这个方法的复用程度就提高*/
  for (Object obj : arr)
   list.add(obj);    }





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2