JAVA基礎day 15 JAVA汎用型の使用

8093 ワード

汎用:JDK 1.5以降の新機能.セキュリティ問題を解決するためのセキュリティメカニズムです.汎用フォーマット:<>で操作する参照データ型を定義します.
汎用型は集合フレームワークでよく用いられ,<>付きは汎用型を用いることができる.汎用型は強転問題を避けることができる.
  
import java.util.*;
class GenericityDemo
{
      public static void main(String []args)
      {
          ArrayList<String> al=new ArrayList<String>();
          al.add("asd");
          al.add("sdf");
          al.add("vbv");

          Iterator<String> i=al.iterator();//           ,             
          while (i.hasNext())
          {
              String s=i.next();
              System.out.println(s);
          }

      }
}

汎用クラス:クラスで操作する参照データのタイプが不確定な場合は、早起きしてobjectクラスを使用し、現在は汎用を使用します.
早起きしてobjectクラスを使用して参照データの不確定を解決するこの場合、異なる参照データ型が転送され、対応する強転操作が行われなければ、コンパイル時期に間違いなく実行中にエラーが発生します.

class Worker {

}
class Student {

}
class Tools {
        private Object obj;
        public void setObject(Object obj)
        {
            this.obj=obj;
        }
        public Object getObject()
        {
            return obj;
        }
}



class GenericityDemo1 {
        public static void main(String[]args)
        {
            Tools t=new Tools();
            t.setObject(new Worker());//        new Student()   ,          ,             
            Worker w=(Worker)t.getObject();

        }
}

汎用クラスを使用すると、汎用クラスとは異なる参照データ型が入力されると、コンパイル時にエラーが発生し、プログラマに渡されます.
class Worker {

}
class Student {

}
class Utils<MM> {
    private MM m;
        public void setObject(MM m)
        {
            this.m=m;
        }
        public MM getObject()
        {
            return m;
        }

}




class GenericityDemo1 {
        public static void main(String[]args)
        {
            Utils <Worker>u=new Utils<Worker>();
            u.setObject(new Worker());//      Student()    ,        。
            u.getObject();

        }
}

*汎用メソッド一般メソッドを定義するには、入力パラメータのタイプを指定する必要があります.汎用メソッドを定義すると、汎用メソッドを定義し、任意のタイプを入力できます.
静的メソッドはクラスで定義された汎用型にアクセスできません.静的メソッド操作のデータ型が不確定な場合は、汎用型を静的メソッドに定義できます.public static void method();汎用型は戻り型の前にある必要があります.
class Demo
{
    public <T>void show(T t)
    {
        System.out.println(t);
    }
    public <M>void print(M m)
    {
        System.out.println(m);
    }

}

class GenericityMethod
{
    public static void main(String []args)
    {
        Demo d=new Demo();
        d.show("haha");
        d.show(3.18598);
        d.print(5);
        d.print("tdf");
    }
}

*汎用インタフェース
interface Inter<T> { 
     show(T t);
}

汎用限定
import java.util.*;
class Person {
    private String name;
    Person(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
}
class Student extends Person {
    Student(String name)
    {
        super(name);
    }

}
class GenericityTest {
    public static void main(String []args)
    {
        ArrayList<Person> al=new ArrayList<Person>();
        al.add(new Person("dfgd"));
        al.add(new Person("ret"));
        al.add(new Person("fdasdfs"));
        printColl(al);
        ArrayList<Student> al1=new ArrayList<Student>();
        al1.add(new Student("student1"));
        al1.add(new Student("student2"));
        al1.add(new Student("student3"));
        printColl(al1); 
    }
    public static void printColl(ArrayList<? extends Person> al)
    {
        Iterator <? extends Person>it=al.iterator();
        //        <?>,      getName()       ,  <?>
        //    Object, Object     getName    ,      。
        while (it.hasNext())
        {
            System.out.println(it.next().getName());
        }
    }
}