Java 泛型簡寫

Java 泛型簡寫

有許多緣由促成了泛型的出現,而最引人注意的一個緣由,就是爲了建立容器類。java

泛型類

/**
 * 泛型類
 */
public class Store<T> {
    T value;

    public Store(T value) {
        this.value = value;
    }

    static public void main(String[] args) {
        Store<String> store = new Store<String>("DARKGEM");
        System.out.println(store.getValue());
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }
}

泛型接口

public class App {
    public static void main(String[] args) {
        Store<String> store = new Store<String>() {
            String val;

            public String get() {
                return val;
            }

            public void set(String val) {
                this.val = val;
            }
        };
        store.set("DARKGEM");
        System.out.println(store.get());
    }
    /**
     * 泛型接口
     */
    public interface Store<T> {
        T get();

        void set(T val);
    }
}

泛型方法

public class App {

    /**
     * 泛型方法
     */
    static <T> String transform(T val) {
        return String.valueOf(val);
    }

    static public void main(String[] args) {
        System.out.println("AAA");
    }
}

<? extends Abs>

import java.util.LinkedList;
import java.util.List;

public class App {

    public static void main(String[] args) {
        //compile pass
        Abs abs = new Impl();
        //compile fail
        List<Abs> fail = new LinkedList<Impl>();
        //compile pass
        List<? extends Abs> pass = new LinkedList<Impl>();
    }

    /**
     * 抽象
     */
    static abstract class Abs {

    }

    /**
     * 實際
     */
    static class Impl extends Abs {

    }
}

經過 <? extends Abs> 能夠實現父抽象類容器引用子實現類容器這種狀況。segmentfault

Tips

泛型的概念是針對編譯器的,在編譯處理後,泛型信息均可以被去除,而後使用Object代替,由於Object是全部對象的Root。this

泛型在必定程度上,能夠美化咱們的code,在編譯時就能夠肯定一些錯誤。可是也不要濫用泛型特性。code

參考

Java泛型:泛型類、泛型接口和泛型方法orm

相關文章
相關標籤/搜索