Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Roman Slíva
Člen
Avatar
Roman Slíva:23. ledna 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. ledna 20:02
Avatar
Roman Slíva
Člen
Avatar
Roman Slíva:23. ledna 20:05

...

 
Nahoru Odpovědět
23. ledna 20:05
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Roman Slíva
Atrament:23. ledna 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. ledna 20:32
Avatar
Roman Slíva
Člen
Avatar
Roman Slíva:23. ledna 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. ledna 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.