Sobes.tech
Middle

Kas ir wildcard Java?

sobes.tech AI

Atbilde no AI

Java zvaigznīte (?) tiek generiku kontekstā tiek izmantota, lai apzīmētu nezināmu tipu. Tā ļauj strādāt ar kolekcijām, kas satur dažādu saderīgu tipu elementus, bez stingras saistības ar konkrētu tipu.

Galvenie lietošanas scenāriji:

  1. ? (Augšējā ierobežotā zvaigznīte): Apzīmē jebkuru tipu, kas ir mantojošs vai realizē norādīto klasi/interfeisu. To izmanto, lasot datus no kolekcijas: Piemērs: List<? extends Number> var saturēt List<Integer>, List<Double>, .getList<Long>.

    // Lasīšana no kolekcijas ar augšējo ierobežojumu
    public void processNumbers(List<? extends Number> numbers) {
        for (Number n : numbers) {
            System.out.println(n);
        }
        // numbers.add(new Integer(10)); // Kļūda kompilēšanā - nevar pievienot elementus
    }
    
  2. ? (Zemākā ierobežotā zvaigznīte): Apzīmē jebkuru tipu, kas ir priekšgājējs norādītajai klasei/interfeisam vai pats šis tips. To izmanto datu rakstīšanai kolekcijā (PECS princips: Producer Extends, Consumer Super): Piemērs: List<? super Integer> var saturēt List<Integer>, List<Number>, List<Object>.

    // Rakstīšana kolekcijā ar zemāko ierobežojumu
    public void addIntegers(List<? super Integer> list) {
        list.add(1);
        list.add(new Integer(2));
        // Object o = list.get(0); // Atgriež Object, jo precīzs tips nav zināms
    }
    
  3. ? (Neierobežota zvaigznīte): Apzīmē jebkuru tipu. Ekvivalentā ar ? extends Object. To izmanto, kad nav svarīgs faktiskais elementu tips, piemēram, izmēra pārbaudei vai tīrīšanai:

    // Darbs ar jebkura tipa kolekciju
    public void printList(List<?> list) {
        for (Object obj : list) {
            System.out.println(obj);
        }
        // list.add("hello"); // Kļūda kompilēšanā - nevar pievienot elementus (izņemot null)
    }
    

Zvaigznīšu simboli palielina koda elastību, ļaujot metodēm strādāt ar plašāku kolekciju tipu diapazonu, vienlaikus saglabājot tipu drošību. Ar to palīdzību var izvairīties no koda dublēšanas metodēm, kas veic vienādas operācijas ar dažādām, bet saderīgām kolekciju tipiem.