泛型中問號的作用


泛型中有個問號什么意思呢,代表某種確定的類型,但是又有不確定性。怎么講呢,這個世界其實每件事情都是這樣的。比如有個接口Ia,實現類有Aone,Atwo,但是呢,在運行的時候有可能是Aone或者Atwo,是哪一個呢,不知道,這是不確定性;但是都是Ia接口的類型,這又是確定性。所以要創建一個泛型類來表示這種情況呢,就可以寫作:

public interface Ia {
   void Say();
}

public class Aone implements Ia {

    @Override
    public void Say() {
        System.out.println("this is " +this.getClass());
        
    }

}

public class Atwo implements Ia {

    @Override
    public void Say() {
        System.out.println("this is" + this.getClass());
    }
    public static void main(String[] args){
        Class<? extends Ia> aAClass=Aone.class;//此處如果換做其他非Ia類就會報錯的
        try {
            Ia aA=aAClass.newInstance();
            aA.Say();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

有人說,我這直接用Class不就可以了嗎,為啥要用問號呢,的確用Class也可以,但是,用了問號就可以在編譯時確定你要的類型的范圍,避免在運行時才知道類型不對。

加了問號后,既有了靈活性又有了確定性,就是有變有不變,該變的變,該不變的不變,這就是所謂的"持經達變",我們老祖宗的中庸之道,就是如此,可以看出軟件領域也符合這個道理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM