汎用的な運用

3549 ワード

汎用型はJava 1.5の新しい特性で、汎用型の本質はパラメータ化タイプで、つまり間違ったデータ型は1つのパラメータに指定されて、このようなパラメータタイプはクラス、インタフェース、方法の中で作成することができて、それぞれ汎用型クラス、汎用型インタフェース、汎用型方法と呼ばれます
JAvaが汎用型を導入する利点は安全で簡単である.汎用型を導入する前に,タイプObjectの参照によりパラメータの任意化を実現する.その欠点は表示するタイプ変換を行うことである.
   Object o = "  ";
   String name = (String) o;

規則と制限
    汎用型のタイプパラメータはクラスタイプのみ、単純タイプint、charなどではない.    そのタイプパラメータは複数のClass
package com.neusoft.kora.cxn.bean;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by lenovo on 2015/12/8.
 */
public class Person<T,K,V> {
    private Map<K,V> hobbys = new HashMap<K, V>();
    private T sex;

    void setHobby(K key, V val) {
        this.hobbys.put(key, val);
    }
    void setSex(T sex) {
        this.sex = sex;
    }
    T getSex() {
        return sex;
    }
    public Map<K, V> getHobbys() {
        return hobbys;
    }

    public Person setHobbys(Map<K, V> hobbys) {
        this.hobbys = hobbys;
        return this;
    }

    @Override
    public String toString() {
        return "Person{" +
                "hobbys=" + hobbys +
                ", sex=" + sex +
                '}';
    }
}
interface Sex{
    public String getSex();
}
class Boy implements Sex{
    public String getSex(){return "boy";}

    @Override
    public String toString() {
        return getSex();
    }
}
class Girl implements Sex{
    public String getSex(){return "gril";}
}
class Application{
    public static void main(String[] args) {
        Person<Sex,Integer,String> person = new Person<Sex, Integer, String>();
        person.setHobby(1,"   ");
        person.setHobby(2,"   ");
        person.setSex(new Boy());
        System.out.println(person);
    }
}

    汎用的なパラメータタイプはextendsキーワードを使用することができ、Classは限界のあるタイプと呼ばれている.    汎用パラメータタイプはワイルドカードタイプ、Classclazz = Class.forName("");不確定なタイプ
package com.neusoft.kora.cxn.bean;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by lenovo on 2015/12/8.
 */

class Money<T extends Number> {
    private T val;

    public T getVal() {
        return val;
    }

    public Money(T val) {
        this.val = val;
    }

    @Override
    public String toString() {
        return "Money{" +
                "val=" + val +
                '}';
    }
}

public class Shop {
    /**
     *            .       
     */
    public <T> T method(T t) {
        return t;
    }
    /**
     *                              
     */
    public static <T extends Number> Money<T> showMoney(T money) {
        return new Money(money);
    }

    public static List<?> printHuo(List<? super Huo> huo){
        return huo;
    }

    public static <E> List<E> newArrayList() {
        return new ArrayList<E>();
    }
    //       
    public static <T> T[] fun1(T...arg){
        return arg;
    }
    public static <T> void fun2(T param[]){   //   
        System.out.print("      :") ;
        for(T t:param){
            System.out.print(t + "、") ;
        }
    }
    public static void main(String[] args) {
       showMoney(10.222);

        List<Money<Double>> x = newArrayList();
    }
}
interface Huo{}

 
   extends     ,          ,          。
   super     ,          ,          。