2014-04-17 20 views
5

im przy użyciu następującego koduJava lista przedmiotów

List<String> text = new ArrayList<String>(); 
text.add("Hello"); 

Tak, że lista będzie akceptować tylko Struny do dodania, w jaki sposób można dodać do jednej listy więcej typów zmiennych, takich jak wskazówki i ciągi razem jak

dodanie do listy tekstowej pewne wartości prostokąt jak nazwa

prostokąta, szerokość, wysokość prostokąta prostokąta

więc później mogę mieć do nich dostęp w pętli

+3

Dlaczego chcesz to zrobić? Czy nie byłoby lepiej napisać klasę z tymi zmiennymi jako pola? – Sionnach733

Odpowiedz

11

Stwórz własną Rectangle klasę i przechowywać te wartości w nim.

List<Rectangle> rectangles = new ArrayList<>(); 
rectangles.add(new Rectangle("Foo", 20, 30)); 
+0

Lepiej, jeśli przechowuje Rectangle w ArrayList zamiast zapisywać tylko nazwę prostokąta. – dharr

+0

didint go edytować kilka sekund temu? – dharr

+0

Tak, komentowałem twój wpis, mówiąc, że powinien on zapisywać nazwę rec w ArrayList i to było trochę dziwne, ponieważ możesz przechowywać cały obiekt i to jest dokładnie to co ostatnio dodałeś :) – dharr

4

Rozwijając nieco na odpowiedź Duncana, oto jak można utworzyć klasę Prostokąt:

public class Rectangle { 
    private String name; 
    private int height; 
    private int width; 

    /** 
    * Create a rectangle by calling 
    * Rectangle myRect = new Rectangle("foo", 20, 10); 
    */ 
    public Rectangle(String name, int height, int width) { 
     this.name = name; 
     this.height = height; 
     this.width = width; 
    } 
} 

Trzeba by dodać metody dostępowe do tego, aby można było odzyskać nazwę, szerokość i wzrost. Są to metody, które są zwykle publiczne nazwane rzeczy jak getName i getWidth (pseudonim pobierające). Możesz także mieć funkcję, która zwraca obszar. Oto przykład.

public String getName() { return name; } 
public int getHeight() { return height; } 
public int getWidth() { return width; } 

public String area() { 
    int area = height * width; 
    return "Rectangle " + name + " has an area " + area + "."; 
} 
+1

Yup. A jeśli ktoś naprawdę chciał, może również owinąć w to obiekt ['java.awt.Rectangle'] (http://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html) klasa do enkapsulacji wysokości i szerokości (jeśli ta klasa była pożądana). –

+1

Dobry punkt, Paul. Klasa zapewniałaby również pochodzenie, gdyby OP potrzebował jej. – rajah9

2

można po prostu stworzyć class która będzie zawierać zmienne, których potrzebujesz i używać tej klasy jako typ danych w deklaracji list.

np:

class MyStructure{ 
    int anInteger; 
    double aDouble; 
    string aString; 
    //Followed by any other data types you need. 

    //You create a constructor to initialize those variables. 
    public MyStructure(int inInt, double inDouble, string inString){ 
    anInteger = inInt; 
    aDouble = inDouble; 
    aString = inString; 
    } 
} 

Potem, gdy masz swój główny lub metodę, i zadeklarować listę po prostu napisać:

List<MyStructure> myList = new ArrayList<>(); 
myList.add(new MyStructure(5, 2.5, "Hello!")); 
0

Chociaż odpowiedź do utworzenia klasy jest z pewnością lepszy sposób, aby zorganizować swój program, odpowiedź na to pytanie jest stworzenie listy typu Object. Następnie możesz dodawać elementy do swojej listy dowolnego typu. Aby określić, jaki rodzaj masz do czynienia w czasie wykonywania, można użyć słowa kluczowego instanceof. Ale żeby było zupełnie jasne, nie jest to dobra praktyka.

List<Object> text = new ArrayList<String>(); 
text.add("Hello"); 
text.add(new Integer(10));