簡體   English   中英

Java Generic Type 新實例

[英]Java Generic Type new instance

public class PairT <T>{
    public T first;
    public T second;

    public T getFirst() {
        return first;
    }

    public void setFirst(T first) {
        this.first = first;
    }

    public T getSecond() {
        return second;
    }

    public void setSecond(T second) {
        this.second = second;
    }

    public PairT(T first, T second) {
        this.first = first;
        this.second = second;
    }
    public PairT() {
    }

這兩種makePair方法本質上有什么區別? 為什么第二個在語法上是非法的?

第一:

public static <U> PairT<U> makePair(Class<U> cl) throws Exception {
        return new PairT<U>(cl.getConstructor().newInstance(),
                            cl.getConstructor().newInstance());
    }

第二:

public static <U> PairT<U> makePair(U cl) throws Exception {
        return new PairT<U(
                  cl.getClass().getConstructor().newInstance(), 
                  cl.getClass().getConstructor().newInstance());
    }

Object.getClass()返回Class<?> ,因此您需要強制轉換。 makePair2直接這樣做,但最后, makePair3使用getClass來隔離需要強制轉換的位置。

    public static <U> PairT<U> makePair1(Class<U> cl) throws Exception {
        return new PairT<U>(cl.getConstructor().newInstance(),
                cl.getConstructor().newInstance());
    }

    public static <U> PairT<U> makePair2(U cl) throws Exception {
        return new PairT<U>(
                (U) cl.getClass().getConstructor().newInstance(),
                (U) cl.getClass().getConstructor().newInstance());
    }

    private static <U> Class<U> getClass(U u) {
        return (Class<U>) u.getClass();
    }

    public static <U> PairT<U> makePair3(U cl) throws Exception {
        return new PairT<U>(
                getClass(cl).getConstructor().newInstance(),
                getClass(cl).getConstructor().newInstance());
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM