class NodeMain {
public static void main
( String [ ] args
) { MyNode mn = new MyNode( 5 ) ;
Node n = mn; // A raw type - compiler throws an unchecked warning
n.setData ( "Hello" ) ;
Integer x
= mn.
data ; // Causes a ClassCastException to be thrown. }
}
class Node< T> {
public 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
) ; }
public void setData
( Integer data
) { System .
out .
println ( "MyNode.setData" ) ; super .setData ( data) ;
}
}
Y2xhc3MgTm9kZU1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIE15Tm9kZSBtbiA9IG5ldyBNeU5vZGUoNSk7CiAgICAgICAgTm9kZSBuID0gbW47ICAgICAgICAgICAgLy8gQSByYXcgdHlwZSAtIGNvbXBpbGVyIHRocm93cyBhbiB1bmNoZWNrZWQgd2FybmluZwogICAgICAgIG4uc2V0RGF0YSgiSGVsbG8iKTsKICAgICAgICBJbnRlZ2VyIHggPSBtbi5kYXRhOyAgICAvLyBDYXVzZXMgYSBDbGFzc0Nhc3RFeGNlcHRpb24gdG8gYmUgdGhyb3duLgogICAgfQp9CgpjbGFzcyBOb2RlPFQ+IHsKCiAgICBwdWJsaWMgVCBkYXRhOwoKICAgIHB1YmxpYyBOb2RlKFQgZGF0YSkgeyB0aGlzLmRhdGEgPSBkYXRhOyB9CgogICAgcHVibGljIHZvaWQgc2V0RGF0YShUIGRhdGEpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vZGUuc2V0RGF0YSIpOwogICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICB9Cn0KCmNsYXNzIE15Tm9kZSBleHRlbmRzIE5vZGU8SW50ZWdlcj4gewogICAgcHVibGljIE15Tm9kZShJbnRlZ2VyIGRhdGEpIHsgc3VwZXIoZGF0YSk7IH0KCiAgICBwdWJsaWMgdm9pZCBzZXREYXRhKEludGVnZXIgZGF0YSkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlOb2RlLnNldERhdGEiKTsKICAgICAgICBzdXBlci5zZXREYXRhKGRhdGEpOwogICAgfQp9Cg==