Rozszerzenie Arraylist

0

Proszę o poinstruowanie mnie jak w Javie z dziedziczonej z ArrayListy napisać metodę add czy inną? Albo w tej nowej klasie do kolekcji kolejne elementy dodawać.
Takie coś nie działa:

class MojaLista extends ArrayList<String>{
public void add(int index, Object element)	{
	super.add(indeks, element); 
} 
0

Nie powinno, bo klasa ArrayList<String> wcale nie ma metody o takiej sygnaturze jaką przedstawiłeś. Jak nadpiszesz faktyczną metodę ArrayList to będzie działać.

0

Pomogło, ale na żółto jest podkreślone prawie wszystko w eclipse i jest przy odpowiednich linijkach napisane:
The serializable class ListaString does not declare a static final serialVersionUID field of type long
ArrayList is a raw type. References to generic type ArrayList<E> should be parameterized
Type safety: The method add(Object) belongs to the raw type ArrayList. References to generic type ArrayList<E> should be parameterized
Type safety: The method add(Object) belongs to the raw type ArrayList. References to generic type ArrayList<E> should be parameterized

Nie sądzę by było to poprawne i nie wiem co to oznacza. Kod przedstawia się następująco:

class ListaString extends ArrayList{
public void add(int index, Object element)	{
	super.add(element); 
}
}

public class Test {
	public static void main(String[] args) {
		ListaString lista = new ListaString(); 
		lista.add("tekst"); 
		lista.add("tekst2");
		System.out.println(lista); 
		
		
	}
 

Mógłbym prosić o przykład jak powinno to być odpowiednio zrobione? Analizując go więcej się nauczę.

0

Nie zrozumiałeś ani słowa z tego co napisałem, a szkoda. Zdecyduj się najpierw co chcesz zrobić:

  • rozszerzyć surowe ArrayList tak jak zrobiłeś teraz?
  • rozszerzyć konkretne, sparametryzowane ArrayList<String> tak jak próbowałes w 1 poscie?
  • rozszerzyć generyczne ArrayList<T>?
0

Drogi użytkowniku z sharinganem Kakashiego i Obito w awatarze chce zrobić tak, by rozszerzyć ArrayListe by mogła przechowywać jakiś mój typ może to być i String jak był w pierwszym poście. Coś takiego ListaString<String> lista = new ListaString<String>(); tak jak ma się to w przypadku zwykłej ArrayListy: ArrayList<String> lista = new ArrayList<String>();.

1
import java.util.ArrayList;
import java.util.List;

public class UberLista<E> extends ArrayList<E> {
    private static final long serialVersionUID = 1L;

    @Override
    public final void add(int index, E element) {
        System.out.println("Nowa implementacja!");
        super.add(index, element);
    }

    public static void main(String[] args) {
        List<String> lista = new UberLista<String>();
        lista.add(0, "ala");
        lista.add(1, "makota");
    }
}

0

Dzięki. O to właśnie mi chodziło. Oczywiści to do celów ćwiczeniowych chciałem zrobić. Tak dla wiedzy. Ale coś mnie zastanawia. Takie nadpisanie nie ma sensu, prawda? Bo jak wiadomo w tej nowej klasie i bez nadpisywania metody add zadziała metod z klasy wyżej jak zrobimy np. lista.add(0, "ala");. Skoro nie widać różnicy to po co przepłacać i się bawić w rozszerzanie ArrayList, skoro ona sama spełni dokładnie tą samą funkcjonalność. Prawda? ArrayList<String> lista = new ArrayList<String>(); i jest.
Kiedy ma więc sens takie rozszerzanie ArrayList i nadpisywanie add? Mógłbym prosić o jakiś przykład? Fragment kodu. I jeszcze mnie ciekawi czy jak w takiej klasie napiszemy samo add i choćby remove to inne metody czy te przeciążone od tych dwóch czy jakieś inne też będziemy musieli nadpisać by nie robiły nic złego w naszej liście, coś czego byśmy nie chcieli, bo jak wiadomo nie nadpisane z klasy wyżej będą się wywoływać.

0

Twoje pytania są bez sensu. Po co tworzymy klasę pochodną? Zwykle po to że tworzymy jakąś klasę bardziej specyficzną. Jaką? Na przykład SortedArrayList - tworzymy sobie listę która dziedziczy z ArrayList i trzyma elementy listy w postaci posortowanej. Musimy do tego przeładować metody dodające i metody usuwające, tak żeby elementy były wstawiane w dobre miejsca.

0
Shalom napisał(a):

Twoje pytania są bez sensu.

Zapewne dla osoby bardziej zaawansowanej jak Ty z pewnością tak jest. Ja się dopiero uczę wiec dla mnie one brzmią logicznie ;). Ale i tak odpowiedziałeś tak, że mnie to zadowoliło. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1