Java zweidimensionales Object Array anlegen aber zur Laufzeit definieren

Gast #2977515
Lesenswert?

Moin,

folgenden Code-Schnipsel habe ich von 
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html 
entnommen:
1
Object[][] data = {
2
    {"Kathy", "Smith",
3
     "Snowboarding", new Integer(5), new Boolean(false)},
4
    {"John", "Doe",
5
     "Rowing", new Integer(3), new Boolean(true)},
6
    {"Sue", "Black",
7
     "Knitting", new Integer(2), new Boolean(false)},
8
    {"Jane", "White",
9
     "Speed reading", new Integer(20), new Boolean(true)},
10
    {"Joe", "Brown",
11
     "Pool", new Integer(10), new Boolean(false)}
12
};

Nun ist die Struktur klar: String String String Integer Boolean.


Wie kann das Objekt data aber zur Laufzeit anlegen. Z.B. wenn ich String 
Integer Boolean brauche.

Und wie kann ich es dann mit Daten befüllen?


Gruß
Holger
#3127066
Lesenswert?

Hallo Holger,

so etwas würde ich über Listen machen.
z.B.:

1.) einen Enum nutzen um die unterschiedlichen Objekttypen zu erkennen:
1
public enum MyTypes{
2
  NONE,
3
  TYPE1,
4
  TYPE2,
5
  TYPE3
6
}

2.) ein Interface basteln, welches dann deine Objecte nutzen
1
public interface IMyTypes {
2
  public MyTypes getMyType();
3
  }

3.) die verschiedenen Klassen erstellen. z.B.:
1
public class MyObjectType1 implements  IMyTypes{
2
  public MyTypes getMyType(){
3
    return MyTypes.TYPE1; 
4
  }
5

6
  public String String1, String2, String3;
7
  public int Integer1;
8
  public boolean Boolean1;
9

10
  public MyObjectType1(){
11
    this.String1 = "";
12
    this.String2 = "";
13
    this.String3 = "";
14
    this.Integer1 = 0;
15
    this.Boolean1 = false;
16
  }
17
  
18
  public MyObjectType1(String String1,String String2,String String3, int Integer1, boolean Boolean1){
19
    this.String1 = String1;
20
    this.String2 = String2;
21
    this.String3 = String3;
22
    this.Integer1 = Integer1;
23
    this.Boolean1 = Boolean1;
24
  }
25
}
26

27

28
public class MyObjectType2 implements  IMyTypes{
29
  public MyTypes getMyType(){
30
    return MyTypes.TYPE2; 
31
  }
32

33
  public String String1;
34
  public int Integer1;
35
  public boolean Boolean1;
36

37
  public MyObjectType2(){
38
    this.String1 = "";
39
    this.Integer1 = 0;
40
    this.Boolean1 = false;
41
  }
42
  
43
  public MyObjectType2(String String1, int Integer1, boolean Boolean1){
44
    this.String1 = String1;
45
    this.Integer1 = Integer1;
46
    this.Boolean1 = Boolean1;
47
  }
48
}
49

50

51
public class MyObjectType3 implements  IMyTypes{
52
  public MyTypes getMyType(){
53
    return MyTypes.TYPE3; 
54
  }
55

56
  public String String1, String2;
57
  public int Integer1, Integer2;
58
  public float Float1;
59

60
  public MyObjectType3(){
61
    this.String1 = "";
62
    this.String2 = "";
63
    this.Integer1 = 0;
64
    this.Integer2 = 0;
65
    this.Float1 = 0.0F;
66
  }
67
  
68
  public MyObjectType3(String String1, String String2, int Integer1, int Integer2, float Float1){
69
    this.String1 = String1;
70
    this.String2 = String2;
71
    this.Integer1 = Integer1;
72
    this.Integer2 = Integer2;
73
    this.Float1 = Float1;
74
  }
75
}

4.) alle Ojekte, deiner Klassen MyObjectTypeX in eine Liste packen und 
dann damit arbeiten. Z.B.:
1
import java.util.ArrayList;
2
import java.util.List;
3

4
public class MainClass {
5
  public static void main(String[] args){
6
    List<IMyTypes> MyObjects = new ArrayList();
7
    
8
    // dynamisches hinzufügen verschiedener KlassenTypen
9
    MyObjects.add(new MyObjectType1());
10
    MyObjects.add(new MyObjectType2());
11
    MyObjects.add(new MyObjectType3());
12
    
13
    // dynamisches hinzufügen verschiedener KlassenTypen mit Werten über den überladenen Constructor
14
    MyObjects.add(new MyObjectType1("Kathy", "Smith", "Snowboarding", 5, false));
15
    MyObjects.add(new MyObjectType2("Kathy", 5, false));
16
    MyObjects.add(new MyObjectType3("Kathy", "Smith", 5, 3, 2.0F));
17
    
18
    // Löschen eines Elements
19
    MyObjects.remove(0);
20
    MyObjects.remove(new MyObjectType2("Kathy", 5, false));
21
    
22
    // Arbeiten mit den Elementen
23
    for (int i = 0; i < MyObjects.size(); i++){
24
      switch (MyObjects.get(i).getMyType()){
25
        case NONE: break;
26
        case TYPE1: {
27
          
28
          // ---- z.B.:
29
          MyObjectType1 object1 = (MyObjectType1)MyObjects.get(i);
30
          String a = object1.String1;
31
          String b = object1.String2;
32
          int c = object1.Integer1;
33
          // irgendetwas mit a, b, c machen
34
          // ---- 
35
          
36
          break;
37
        }
38
        case TYPE2: break;
39
        case TYPE3: break;
40
        default: break;
41
      }
42
    }
43
  }
44
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren