首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泛型类型擦除ClassCastException

泛型类型擦除ClassCastException
EN

Stack Overflow用户
提问于 2012-09-09 18:15:24
回答 4查看 297关注 0票数 2
代码语言:javascript
运行
复制
package practice;

class Node<T> {

    T data;

    public Node(T data) { this.data = data; }

    public void setData(T data) {
        System.out.println("Node.setData");
        this.data = data;
    }
}

class MyNode extends Node<Integer> {
    public MyNode(Integer data) { super(data); }

    @Override
    public void setData(Integer data) {
        System.out.println("MyNode.setData");
        super.setData(data);
    }
}

public class Practice {
    public static void main(String[] s)
    {
        MyNode mn = new MyNode(5);
        Node n = mn;            // A raw type - compiler throws an unchecked warning
        n.setData("Hello");     // Causes a ClassCastException to be thrown.
        Integer x = mn.data;    
    }
}

为什么此代码在n.setData("Hello");抛出异常,而实际上它应该在Integer x = mn.data;抛出异常

http://docs.oracle.com/javase/tutorial/java/generics/bridgeMethods.html

EN

Stack Overflow用户

发布于 2012-09-09 18:22:27

您已经通过调用以下方法为Node定义了类型T

代码语言:javascript
运行
复制
MyNode mn = new MyNode(5);

Integer类型。通过调用n.setData("Hello");,您正在尝试为Integer字段传入字符串变量。Node n仅仅是Integer类型的Node mn的一个引用。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12338232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档