Für ints und die anderen eingebauten Typen ist das Array per se mit 0 initialisiert, bzw. false für boolean. Es reicht dann also:
int feld[][] = new int[10][10];
Für die anderen Typen sehe ich 2 Ansätze, die beide nicht so überzeugen, und Du musst dazu die betreffenden Klassen ändern können:
Ein Interface, bei dem Du aber ein Dummyobjekt brauchst, und casten mußt, oder statische Factories, die dann aber nicht nach außen dokumentieren, daß sie geeignet sind für dieses Vorgehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 | interface Gen2d
{
public Object [][] generate (int dim1, int dim2);
}
class Bronko implements Gen2d
{
int i = 7;
public Object [][] generate (int dim1, int dim2)
{
Bronko [][] b = new Bronko [dim1][dim2];
for (int i=0; i < dim1; ++i)
{
for (int j=0; j < dim2; ++j)
{
b [i][j] = new Bronko ();
}
}
return b;
}
}
class Zizi
{
int i = 7;
public static Zizi [][] generate (int dim1, int dim2)
{
Zizi [][] b = new Zizi [dim1][dim2];
for (int i=0; i < dim1; ++i)
{
for (int j=0; j < dim2; ++j)
{
b [i][j] = new Zizi ();
}
}
return b;
}
}
public class A2Dfill
{
public A2Dfill ()
{
int[][] feld = new int[10][10];
System.out.println (feld [4][7]);
// dummy-Objekt:
Bronko bronko = new Bronko ();
Bronko [][] b = (Bronko [][]) bronko.generate (8, 11);
System.out.println (b [4][7]);
Bronko [][] b2 = (Bronko [][]) bronko.generate (18, 4);
System.out.println (b2 [4][2]);
Zizi [][] z = Zizi.generate (18, 4);
System.out.println (z [4][2]);
}
public static void main (String args[])
{
new A2Dfill ();
}
}
|
Wenn Du für jeden Typ nur eine solche Methode aufrufst kannst Du es natürlich genausogut an Ort und Stelle machen. Generierst Du für einen Typen viele 2d-Arrays, dann ist es vielleicht hilfreich.
Kommst Du an die Klasse nicht ran, so kannst Du eine Factoryklasse bauen, die die Generatoren bereitstellt.
Java-Generics helfen leider nicht weiter, weil man nicht new auf einem generischen Typen aufrufen kann:
| public <T> generate (int x, int y)
{
T [][] t = new T [x][y];
// ...
t[i][j] = new T ();
//
return t;
}
|
Wenn die Typen alle Cloneable implementieren, dann kannst Du mit Reflection und clone vielleicht was reißen.