汎用クラス、汎用メソッド、汎用インタフェース

19400 ワード

汎用クラス:汎用がない前に、操作オブジェクトを定義するツールクラスは次のようになります.
 1 public class Tools {

 2     public static void main(String[] args) {

 3         Tool t = new Tool();

 4         t.setWorker(new Worker());

 5         t.getWorker();

 6     }

 7 }

 8 class Tool{

 9     private Worker w;

10     public void setWorker(Worker w){

11         this.w = w;

12     }

13     public Worker getWorker(){

14         return w;

15     }

16 }

17 class Worker{

18     

19 }

20 

21 class Student{

22     

23 }

しかし、クラスを定義するたびに操作クラスを定義するツールが面倒なので、どのオブジェクトが伝わっても受け入れられ、クラスを定義するたびに操作クラスを定義するツールが不要になるように最適化します.
 1 public class Tools {

 2     public static void main(String[] args) {

 3         Tool t = new Tool();

 4         t.setObject(new Worker());

 5         Worker w = (Worker)t.getObject();

 6     }

 7 }

 8 class Tool{

 9     private Object obj;

10     public void setObject(Object obj){

11         this.obj = obj;

12     }

13     public Object getObject(){

14         return obj;

15     }

16 }

17 class Worker{

18     

19 }

20 

21 class Student{

22     

23 }

 
汎用型が出現した後のやり方は、汎用クラスを定義し、エラーをコンパイル時期に移行し、クラスで操作する参照データ型が不確定な場合は汎用クラス、早期定義Objectで拡張を完了し、現在定義されている汎用クラスを定義して完成する.
 1 public class GenericDefineDemo {

 2     public static void main(String[] args) {

 3         Utils<Worker> u = new Utils<Worker>();

 4         u.setObject(new Worker());

 5         Worker w = u.getObject();

 6     }

 7 }

 8 class Utils<QQ>{

 9     private QQ q;

10     public void setObject(QQ q){

11         this.q = q;

12     }

13     public QQ getObject(){

14         return q;

15     }

16 }

17 class Worker{

18     

19 }

20 

21 class Student{

22     

23 }

 
 
汎用メソッド:汎用クラス定義の汎用は、クラス全体で有効であり、メソッドで使用する場合、汎用クラスのオブジェクトが操作する具体的なタイプを明確にすると、操作するタイプはすべて固定される.異なるメソッドが異なるタイプを操作でき、タイプがまだ確定していないように、汎用型をメソッドに定義することができます.
 1 public class GenericFactionDemo1 {

 2     public static void main(String[] args) {

 3         Demo<String> d = new Demo<String>();

 4         d.show("huangjianfeng");

 5         d.print("haungjianfei");

 6         //d.print(new Integer(4));//

 7     }

 8 

 9 }

10 class Demo<T>{

11     public void show(T t){

12         System.out.println("show:"+t);

13     }

14     public void print(T t){

15         System.out.println("print:"+t);

16     }

17 }

 
 1 public class GenericFactionDemo1 {

 2     public static void main(String[] args) {

 3         Demo  d = new Demo();

 4         d.show(new Integer(4));

 5         d.show("huangjiafnds");

 6     }

 7 

 8 }

 9 class Demo{

10     public <T> void show(T t){

11         System.out.println("show:"+t);

12     }

13     public <Q> void print(Q q){

14         System.out.println("print:"+q);

15     }

16 }

汎用型をクラスに定義したり、汎用型をクラスの一部のメソッドに定義したりすることができます.このように汎用型を定義する方法はありません.クラスのタイプに従って、汎用型を定義する方法は勝手にタイプすることができます.
静的メソッドはクラスで定義された汎用型にアクセスできません.静的メソッド操作の参照データ型が不確定な場合は、汎用型を静的メソッドに定義できます.
 1 public class GenericFactionDemo2 {

 2     public static void main(String[] args) {

 3         Demo<String> d = new Demo<String>();

 4         d.show("huangjianfeng");

 5         //d.show(new Integer(3)); ,show , 

 6         d.print("haungjianfei");//

 7     }

 8 }

 9 class Demo<T>{

10     public void show(T t){

11         System.out.println("show:"+t);

12     }

13     public <Q> void print(Q q){

14         System.out.println("print:"+q);

15     }

16     public static <w> void method(w t){

17         System.out.println("method:"+t);

18     }

19 }

 
 
汎用インタフェース:
 1 public class GenericInterfaceDemo {

 2     public static void main(String[] args) {

 3         InterImpl i = new InterImpl();

 4         i.show("huangjianfei");

 5     }

 6 }

 7 // 

 8 interface Inter<T>{

 9     void show(T t);

10 }

11 class InterImpl implements Inter<String>{

12     public void show(String t){

13         System.out.println("show:"+t);

14     }

15 }

 
 1 public class GenericInterfaceDemo {

 2     public static void main(String[] args) {

 3         InterImpl<Integer> i = new InterImpl<Integer>();

 4         i.show(4);

 5     }

 6 }

 7 interface Inter<T>{

 8     void show(T t);

 9 }

10 class InterImpl<T> implements Inter<T>{

11     public void show(T t){

12         System.out.println("show:"+t);

13     }

14 }