Java中的通配符和限定是泛型中的兩個重要概念。雖然它們都涉及到泛型類型的聲明,但它們的使用方式和效果是有所不同的。
通配符使用符號“?”來代替具體的類型參數。它可以用來表示任意類型的參數,例如:
<? extends SomeClass> <? super SomeClass> <?>
在實踐中,通配符通常用于包含不同子類型的集合或數組,以便能夠接受所有子類型。由于通配符不能用于方法參數或類型參數,因此其受限制的使用場景限制了它的使用范圍。
限定在另一方面允許在聲明泛型類型時指定它們的上限或下限。這將限制該類型可以接受的實際類型參數類型的范圍。例如:
<T extends SomeClass> <T super SomeClass>
在實踐中,限定通常用于需要比通配符更精細的控件的場景,例如方法參數和類型參數(其中的類型參數可以用于泛型類和泛型接口)。
總之,Java中的通配符和限定都是重要的泛型概念。雖然他們在某些方面相似,但實際應用上還是有所不同。通配符主要用來擴展類型的范圍,而限定則更多地用來收緊類型的范圍。