Naprawdę podstawowy problem ze zrozumieniem OO, z którym się spotykam, każda pomoc jest bardzo mile widziana.

Próbuję dodać instancje "Thing" do tablicy arraylist za każdym razem, gdy naciskam przycisk, nie mogę sobie wyobrazić, jak stworzyć unikalne instancje do dodania do listy. Naciśnięcie innego przycisku powinno usunąć najnowszy obiekt z listy.

ArrayList myList = new ArrayList<Thing>();
if(input.isKeyPressed(Input.KEY_A)){
            Thing myThing = new Thing();
            myThing.setNumber(myList.size());
            myList.add(myThing);
        }

if(input.isKeyPressed(Input.KEY_R)){
            if(myList.size()>0){
                myList.remove(myList.size()-1);
            }
        }

Jeśli planuję robić wiele „rzeczy” i nie obchodzi mnie, jak się nazywają (ani nie chcę śledzić unikalnych nazw rzeczy-obiektów). Jak mogę stworzyć unikalny obiekt „rzeczy” po każdym naciśnięciu przycisku przy minimalnym bólu.

AKTUALIZACJA: Dzięki za komentarze, proszę pozwolić mi spróbować lepiej sformułować moje pytanie... Kiedy tworzę ArrayList pełną 'Thing', której każda instancja nazywa się "myThing", każda instancja ma te same wartości zmiennych instancji.

Gdybym chciał, żeby niektóre z „Rzeczy” miały boolean isVisable = true, a inne miały boolean isVisable = false. Utknąłem, ponieważ każdy element listy ma tę samą nazwę.

1
Reustonium 27 luty 2012, 01:01

2 odpowiedzi

Najlepsza odpowiedź

Upewnij się, że Thing poprawnie implementuje equals i hashCode, a następnie przechowuj instancje w kolekcji Set (tj. HashSet). Dzięki wdrożeniu hashCode() i equals() od Ciebie będzie zależeć, które dwie instancje Thing będą takie same, dzięki czemu będziesz mógł wymusić unikalność w dowolny sposób.

Sztuczka polega na tym, że implementacja hashCode() i equals() nie jest całkowicie trywialna, ale musisz wiedzieć, jak to zrobić, jeśli planujesz używać Javy. Przeczytaj więc odpowiedni rozdział Efektywnej Javy (lub jeszcze lepiej przeczytaj cały książka).

2
MK. 27 luty 2012, 02:34

Spróbuj tego:

$ cat Thing.java
import java.util.*;
public class Thing{
        UUID id;
        Thing () {
                id = UUID.randomUUID();

        }

        public String toString(){
                return id.toString();

        }

        public static void main(String[] argv) {
                Thing t = new Thing();

                System.out.println(t);
        }
}


$ javac Thing.java  && java Thing 
08bb3702-84d3-4bc3-b8ab-bb52b90b8f78
0
Ярослав Рахматуллин 27 luty 2012, 01:20