NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze: Problém s kompilací <E> a Object

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Roman Slíva
Člen
Avatar
Roman Slíva:23.1.2024 20:02

Zdravím !
(začátečník)

Původně jsem měl ve třídě tuto formulaci

public class BufferedArrayList<E> extends ArrayCalculator implements IBufferedArrayList {
    private E arr[];
.......

    @Override
    public void set(int i, E value) ;
   { ........ }

A odpovědí bylo : BufferedArrayList is not abstract and does not override abstract method set(int,java.lan­g.Object)
OK, dobře, je to špatně, nebereš tady "E" ... "Object" mi nevadí, budem přetypovávat a upravil jsem interface i class na

public void set(int i, Object value) ;

uběhl čas a něco jsem hledal ... přes CTRL jsem se proklikl do JAVA src (17) pro ArrayList a List.
A to je důvod, proč toto nyní píší.
V ArrayList to vypadá

public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable
..........

public E set(int index, E element)

v interface od List je

public interface List<E> extends Collection<E> {
.....

E set(int index, E element);

Zkusil jsem: Jakou mám chybu v prostém

public void set(int i, E value) {...}

a musím uvádět

public void set(int i, Object value){...}

... a nebo ... jak zkompilovat abych toto mohl používat ?
Můžete mě jen nakopnout nějakým směrem, na co se podívat ?
Resp. prosté ... proč to v core mají a používají a v mé kompilaci to vyhodí tuto chybu a nedovolí parametr typu E.

Chci docílit: Důvod prosím nehledejte. V kurzu jsme za bonusový úkol dostali vytvořit svůj vlastní ArrayList a jen na Integer. Strávil jsem na tom nafukování, vyfukování a kopírování spoustu času a class se mi líbí. Pro konečný projekt v kurzu to chci použít (je to moje, tak proč né) na více typů. Proto jsem se pustil do přestavby nejdříve na Object s tím, že přetypuji výsledek a nyní potřetí s generikou.

Předem díky.

 
Odpovědět
23.1.2024 20:02
Avatar
Roman Slíva
Člen
Avatar
Roman Slíva:23.1.2024 20:05

...

 
Nahoru Odpovědět
23.1.2024 20:05
Avatar
Atrament
Člen
Avatar
Odpovídá na Roman Slíva
Atrament:23.1.2024 20:32

Řekl bych že ti tam akorát někde chybí <E>, zkontroluj, že to máš všude kde je potřeba, to znamená:

  1. v definici interface, například:
public interface IBufferedArrayList<E> {
    void set(int index, E value);
...
  1. při jeho implementaci
public class BufferedArrayList<E> implements IBufferedArrayList<E> {

    @Override
    public void set(int index, E value);
...
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
23.1.2024 20:32
Avatar
Roman Slíva
Člen
Avatar
Roman Slíva:23.1.2024 21:15

Díky. Viz. úplně první řádek. V tom interface to mám dobře, ale ve třídě, v implementation to <E> chybí.
Taková blbost a tolik hodin :( :( :( :( :( :( :(

Moc Ti díky !!!

 
Nahoru Odpovědět
23.1.2024 21:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.