JAVA基礎day 15 JAVA汎用型の使用
8093 ワード
汎用:JDK 1.5以降の新機能.セキュリティ問題を解決するためのセキュリティメカニズムです.汎用フォーマット:<>で操作する参照データ型を定義します.
汎用型は集合フレームワークでよく用いられ,<>付きは汎用型を用いることができる.汎用型は強転問題を避けることができる.
汎用クラス:クラスで操作する参照データのタイプが不確定な場合は、早起きしてobjectクラスを使用し、現在は汎用を使用します.
早起きしてobjectクラスを使用して参照データの不確定を解決するこの場合、異なる参照データ型が転送され、対応する強転操作が行われなければ、コンパイル時期に間違いなく実行中にエラーが発生します.
汎用クラスを使用すると、汎用クラスとは異なる参照データ型が入力されると、コンパイル時にエラーが発生し、プログラマに渡されます.
*汎用メソッド一般メソッドを定義するには、入力パラメータのタイプを指定する必要があります.汎用メソッドを定義すると、汎用メソッドを定義し、任意のタイプを入力できます.
静的メソッドはクラスで定義された汎用型にアクセスできません.静的メソッド操作のデータ型が不確定な場合は、汎用型を静的メソッドに定義できます.public static void method();汎用型は戻り型の前にある必要があります.
*汎用インタフェース
汎用限定
汎用型は集合フレームワークでよく用いられ,<>付きは汎用型を用いることができる.汎用型は強転問題を避けることができる.
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());
}
}
}