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==