Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe folgendes Problem:
Ich habe einen Vector erstellt in dem Objekte verschiedener art gespeichert sind.
Zum Beispiel habe ich 3 verschiedene Klassen geschrieben, und objekte dieser klassen sollen in den Vector.
Das ist ja auch kein Problem, doch beim rauslesen weiß ich ja nicht, welches objekt ich grad habe, also
weiß ich auch nicht zu welchem ich es casten soll. Hier der Code, damit es anschaulicher ist
Code:
objekt1 b = new objekt1();
objekt2 c = new objekt2();
Vector a = new Vector();
a.add(b);
a.add(c);
a.get(1).methode; // objekt 1 hat zb. die methode a und objekt2 die methode b...
// und jenachdem welches objekt grad drin ist, muss "a" oder "b" aufgerufn werden, aber woher weiß ich welche art
// objekt drin ist?
Integer a = new Integer(1);
String b = new String("2");
Double c = new Double(3.3);
Object[] objArray = {a, b, c};
System.out.println("a should be Integer: " + objArray[0].getClass());
System.out.println("b should be String: " + objArray[1].getClass());
System.out.println("c should be Double: " + objArray[2].getClass());
Es ist selten eine gute Idee Objekte die keine gemeinsame Basis haben in die gleiche Collection zu packen
(wenn du nicht mit Threads arbeitest nimm übrigens ArrayList). Ich würde mir daher genau überlegen ob das die richtige Lösung für dein Problem ist.
Je nach Anforderung kann man das auch über Interfaces regeln:
Code:
interface VectorEntryInterface {
public void exec();
}
class ClassA implements VectorEntryInterface {
//...
public void exec() {
//...
}
//...
}
class ClassB implements VectorEntryInterface {
//...
public void exec() {
//...
}
//...
}
class MainClass {
ClassA a = new ClassA();
ClassB b = new ClassB();
Vector v = new Vector();
public MainClass() {
v.add(a);
v.add(b);
((VectorEntryInterface)v.get(1)).exec();
}
public static void main(String[] args) {
new MainClass();
}
}
Dadurch dass ClassA und -B beide das gleiche Interface implementieren haben sie die Methode "exec". Die Implementierung kann in beiden Klassen völlig unterschiedlich sein, aber der Aufruf ist trotzdem gleich.
Naja mein Konkretes Problem ist, dass ich ein 2-Dimensionales Feld (100 * 100) habe und in jedem "Quadrat" kommt nur 1 Objekt rein, allerdings können Objekte verschiedener Art hinein. Das ist eigetnlich alles
Ganz simpel: Mit instanceof testen, was es für ein Objekt ist, und unterschiedlich reagieren, in der Art wie es SebiB90 geschrieben hat. Oder verstehe ichd as Problem falsch?
Also die Objekte haben alle eine Methode "anzeigen", mit der sie sich an einer Position "hinzeichnen", ansonsten können die Objekte eigentlich nicht viel ... Naja jede Objektart hat ein anderes Bild, mit dem es sich zeichnet.. das wars aber eigentlich auch schon.