汎用クラスのカスタマイズ


汎用クラスを定義する理由は、クラスで操作する参照データ型が不確定な場合です.
汎用クラスを採用し、拡張を完了します.
例えば学生クラスがあります
   
Student{
  Student(){
   System.out.println("I'm a student.....");
  }
}

先生のクラスがあります.
 
Teacher{
  Teacher(){
   System.out.println("I'm a teacher.....");
  }
}

汎用クラスの定義Utils
class Utils<Kind>
{
      private Kind k;
     public void setObject(Kind k){
           this.k=k;
    }
    public Kind getObject(){
      return k;
   }
}

public主クラス
public class GenericDemo{
    public static void main(){
      Uitls<Teacher> ut=new Utils<Teacher>();//     ,    
     Utils<Student> us=new Utils<Student>();//Teacher  Student 

     ut.setObject(new Teacher());
     Teacher teacher=ut.getObject();//       
//   I‘m a teacher。。。

     us.setObject(new Student());
     Student student=us.getObject();//       
//   I‘m a Student。。。


     ut.setObject(new Student());
     Teacher teacher=ut.getObject();//      ClassCastException,    
  }
}