请帮忙看看下面的代码,如何在方法中,修改带范型的集合?谢谢!package com.ocjp.generic;import java.util.*;
interface Canine { }
class Dog implements Canine { }public class Collie extends Dog {
public static void main(String[] args) {
List<Dog> d = new ArrayList<Dog>();
List<Collie> c = new ArrayList<Collie>();
d.add(new Collie());
c.add(new Collie());
do1(d);
do1(c);
}
static void do1(List<? extends Dog> d2) {
// 下面这句话会报编译错误,我想给d2增加一个值,怎么加?
// d2.add(new Collie());
System.out.print(d2.size());
}}
Javageneric
interface Canine { }
class Dog implements Canine { }public class Collie extends Dog {
public static void main(String[] args) {
List<Dog> d = new ArrayList<Dog>();
List<Collie> c = new ArrayList<Collie>();
d.add(new Collie());
c.add(new Collie());
do1(d);
do1(c);
}
static void do1(List<? extends Dog> d2) {
// 下面这句话会报编译错误,我想给d2增加一个值,怎么加?
// d2.add(new Collie());
System.out.print(d2.size());
}}
Javageneric
List<Dog> c = new ArrayList<Collie>();
不知如何解决,静等高手,下···
你只能写两个函数,一个叫do1(List<Dog> list),另一个叫do1(List<Collie> list)
List<Dog> c = new ArrayList<Collie>();
c.add(new Collie()); //添加了一个Collie到ArrayList<Collie>,没问题现在假设有另一个类
Puddle extands Dog {...}
c.add(new Puddle()); //看上去是对的,Puddle是Dog,Puddle可以放到List<Dog>里面但其实是错的,因为c其实是ArrayList<Collie>,Puddle显然不能放进Collie的列表里。范型的作用就是为了防止这种问题发生,编译器为我们做的检查
List<Dog> c = new ArrayList<Collie>();
c.add(new Collie()); //添加了一个Collie到ArrayList<Collie>,没问题现在假设有另一个类
Puddle extands Dog {...}
c.add(new Puddle()); //看上去是对的,Puddle是Dog,Puddle可以放到List<Dog>里面但其实是错的,因为c其实是ArrayList<Collie>,Puddle显然不能放进Collie的列表里。范型的作用就是为了防止这种问题发生,编译器为我们做的检查
反推的很好~
请教下,do1(List<? extends Dog> d2)这种方法的声明是不是没有用了?
class Dog implements Canine { }
public class Collie extends Dog {
public static void main(String[] args) {
List<Dog> d = new ArrayList<Dog>();
List<Collie> c = new ArrayList<Collie>();
d.add(new Collie());
c.add(new Collie());
do1(d);
do1(c);
List<Integer> e = new ArrayList<Integer>();
do1(e);
}
static void do1(List<? extends Dog> d2) {
// 下面这句话会报编译错误,我想给d2增加一个值,怎么加?
//d2.add(new Dog());
d2.remove(1);
System.out.print(d2.size());
}
}
我记得你好像发过类似的问题,这篇你看了没,你懂了没?