Unchecked call to 'add(E)' - Warming

Odpowiedz Nowy wątek
2014-12-29 01:41
0

Witam
Czy jest możliwe usunięcie poniższego warminga?
Unchecked call to 'add(E)' as a member of raw type 'java.util.ArrayList

Custom_ArrayList

import java.util.ArrayList;

public class Custom_ArrayList {

    ArrayList<Custom_ArrayList> D;

    ArrayList Array;

    <T> Custom_ArrayList(){

        Array = new ArrayList<T>();

    }

}

Main

private Custom_ArrayList Buttons_Menu;
Buttons_Menu = new <Button> Custom_ArrayList();
Buttons_Menu.Array.add(new Button());

Czytałem o @SuppressWarnings("unchecked"), jednak nie wiem czy słusznie, ale nie wydaje mi się to dobrą praktyką.
Powyższa klasa ma za zadania stworzyć ArrayList obiektów oraz "wskaźnik" na następne ArrayListy.

edytowany 2x, ostatnio: Kamil9132, 2014-12-29 01:43

Pozostało 580 znaków

2014-12-29 03:07

Ale co to jest niby? Ten kod to jakiś WTF... Co ty tu chciałeś zrobić? Bo ewidentnie zrobiłeś to bardzo bardzo źle...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2014-12-29 03:27
0

Klasa ta miała przechowywać przyciski menu. Z głównego menu można dostać się do kilku następnych, z każdego kolejnego menu do następnych. Uznałem że najlepszym rozwiązaniem będzie klasa zawierająca ArraList z przyciskami obecnego menu oraz coś w style wskaźnika do następnej ArrayListy.

EDIT:
Problem rozwiązany, poczytałem trochę o klasach i uznałem że poprzednia była faktycznie lekkim WTF.
Zmodyfikowany kod:

public class Custom_ArrayList <T>{

    ArrayList<Custom_ArrayList> D;

    ArrayList <T> Array;

}
edytowany 6x, ostatnio: Kamil9132, 2014-12-29 04:06

Pozostało 580 znaków

2014-12-29 11:34
0

Nadal wygląda mi to na WTF :)
W szczególności nazwy obiektów: D oraz Array i to jeszcze pisane wielką literą ;)

Pozostało 580 znaków

2014-12-29 11:47
Świetny Szczur
1
Kamil9132 napisał(a):

Czy jest możliwe usunięcie poniższego warminga?

Nie usuwaj. W zimie to zaleta. ;P

Pozostało 580 znaków

2014-12-29 11:59
0

@bakeraw2
Co jest złego w nazwie Array?
D jest dlatego że klasa zawiera tylko dwa pola, a dłuższa nazwa zajmowałaby zbyt wiele miejsca przy odwoływaniu się do dalszych "wymiarów" klasy:
Buttons_Menu.get(2).D.get(1).D.get(1).D.get(0).Array.add(...)

Więcej niż jedna kropka w linijce to zwykle błąd i bardzo zły pomysł... - Shalom 2014-12-29 12:17
"Co jest złego w nazwie Array?" to że nazywa się Array - niezdecydowany 2014-12-29 12:26
Jaka sposób byłby lepszy do osiągnięcia mojego celu? - Kamil9132 2014-12-29 12:52
Np. nazwać zmienną Button lub Object. - bogdans 2014-12-29 13:34
Nazwa Array lub D nic nie mówi osobie, która ma czytać Twój kod. Wyobraź sobie że masz listę z liczbami, czy widzisz różnicę pomiędzy nazwaniem jej numbers a D? - bakeraw2 2014-12-30 16:09
Array na dodatek wprowadza w błąd, tak się nazywa klasa z biblioteki standardowej. - bogdans 2014-12-30 17:38

Pozostało 580 znaków

2014-12-30 16:12
0
Kamil9132 napisał(a):

Buttons_Menu.get(2).D.get(1).D.get(1).D.get(0).Array.add(...)`

Ja bym się zastanowił nad tym kodem... ;)

Pozostało 580 znaków

2014-12-30 16:39
0

Mógłbyś podać jaki sposób zaprojektowania menu byłby lepszy? Nie chodzi mi o kod, tylko bardziej o pomysł.
Obecny sposób wydaje mi się dogodny do użycia, jednak z lepszego z chęcią bym skorzystał.

Rysowanie menu:

    public void Draw(Canvas canvas) {

        canvas.drawBitmap(Graphic_Menu.Menu[6], 0, 0, null); //Tło

        Custom_ArrayList<Button> Template = Buttons_Menu.get(MenuPage.get(0));

        for (int TB_01 = 1; TB_01 < MenuPage.size(); ++TB_01) Template = Template.D.get(MenuPage.get(TB_01));

        for (Button TB_01 : Template.Array) TB_01.Draw(canvas, false, 0, false);

    }

Obsługa kliknięć:

        int Value = ArrayList_To_Value(MenuPage);
        int Result = 0;

        if (Value == 0)         Result = MenuLogicClick_00(X, Y);
        else if (Value == 1)    Result = MenuLogicClick_01(X, Y);
        else if (Value == 20)   Result = MenuLogicClick_02_0(X, Y);
        else if (Value == 21)   Result = MenuLogicClick_02_1(X, Y);
        else if (Value == 210)  Result = MenuLogicClick_02_1_0(X, Y);
        else if (Value == 211)  Result = MenuLogicClick_02_1_1(X, Y);
        else if (Value == 2110) Result = MenuLogicClick_02_1_1_0(X, Y);
        else if (Value == 212)  Result = MenuLogicClick_02_1_2(X, Y);
        else if (Value == 213)  Result = MenuLogicClick_02_1_3(X, Y);
        else if (Value == 214)  Result = MenuLogicClick_02_1_4(X, Y);
        else if (Value == 3)    Result = MenuLogicClick_03(X, Y);
        else if (Value == 4)    Result = MenuLogicClick_04(X, Y);
    private int ArrayList_To_Value(ArrayList<Integer> Array){

        int Value = 0;

        for (int TB_01 = 0; TB_01 < Array.size(); ++TB_01){

            Value += Array.get(TB_01) * Math.pow(10, Array.size() - TB_01 - 1);

        }

        return Value;

    }
edytowany 1x, ostatnio: Kamil9132, 2014-12-30 16:40

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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