RSS订阅欢迎来到Java程序员学习天地!
你的位置:首页 » 每日一题 » 正文

每日一题之20170515

选择字号: 超大 标准 发布时间:2017年05月12日 | 作者:amour505 | 0个评论 | 71人浏览

每日一题之20170514答案:   List<Number> list = new ArrayList<Integer>();这一行编译不通过。java中泛型是不支持协变的,协变就是指使用窄类型替代宽类型。虽然Integer是Number的子类型,但是Java为了保证运行期的安全性,必须保证泛型参数类型是固定的,所以它不允许一个泛型参数可以同时包含两种类型,即使是父子类关系也不行。即使这样,但可以使用通配符模拟协变。List<? extends Number> list = new ArrayList<Integer>();这样写就不会有问题。

package mypkg;

import java.util.Arrays;

public class Test {  
    
    public static void main(String[] args) {  
        int num = 2;  
        Cat[] c1 = new Cat[num];  
        for(int i = 0; i < num; i++){  
            c1[i] = new Cat(i, Color.values()[i]);  
        }  
  
        Cat[] c2 = Arrays.copyOf(c1, c1.length);  
        c2[1].setColor(Color.white);  
        for(Cat c : c1){  
            System.out.println(c);  
        }  
    }  
}  

enum Color{  
    white, black;  
}  
  
class Cat{  
    private int id;  
    private Color color;  
  
    public Cat(int id, Color color) {  
        super();  
        this.id = id;  
        this.color = color;  
    }  
  
    public Color getColor() {
        return color;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    public String toString(){  
        return "id:"+id+",color:"+color;  
    }  
}  
输出?


标签:每日一题Java基础

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

控制面板
您好,欢迎到访网站!
随机文章
热门文章
热评文章
最近发表