Explizite Typkonversation mit Strings

  • Themenstarter Themenstarter Tomate_Salat
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
T

Tomate_Salat

Gast
Hi,
ist es iwie möglich soetwas in der Art zu realisieren:

[Java]
public void test(Object test, int z) {
String typ = (z == 0) ? "JTextField" : "JButton";

Object b = (typ) test;
}
[/code]

meine Anwendung ist selbstverständlich komplexer als dieses Beispiel, aber ich hätte gerne, dass wenn z.B. z = 0 ist, das Objekt automatisch als JButton genutzt wird.

BTW: Das obenstehende funktioniert übrigends nicht ;-) suche nach einer anderen methode

MFG

Tomate_Salat
 
Java:
switch (z) {
case 0:
    JTextField b = (JTextField) test;
    [...]
    break;
default:
    JButton b = (JButton) test;
    [...]
}
 
nope, genau sowas suche ich nicht. Ich wollte das so händeln:

Ich habe eine HashMap, bei dem als Value eine Klasse angegeben wird, in der das Objekt gespeichert wird. Zudem erkennt die klasse automatisch um welchen Typ es sich handelt und speichert diesen als String ab. Jz wollte ich diesen String verwenden, um das Objekt später wieder herstellen zu können.

Die Hashmap
Java:
HashMap<Integer, Collector> map = new HashMap<Integer, Collector>();

Die Collector-Klasse:
Java:
public class Collector {
	private String TYPE;
	private Object OBJ;
	
	public Collector(Object obj) {
		setTYPE( obj.getClass().getSimpleName() );
		setOBJ( obj );
	}

	// Setter
	private void setTYPE(String tYPE) {
		TYPE = tYPE;
	}
	private void setOBJ(Object oBJ) {
		OBJ = oBJ;
	}

	// Getter
	public String getTYPE() {
		return TYPE;
	}

	public Object getOBJ() {
		return OBJ;
	}
}

€: ein Aufruf sollte dann so etwa aussehen:
Java:
Object tmp = (map.getTYPE) map.getOBJ();

MFG

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:
geht so nicht

wenn du dir den vollqualifizierten namen speicherst (also nicht String sondern java.lang.String) kannst du ueber reflections wieder eine Instanz erzeugen.

aber warum speicherst du nicht gleich das Objekt in die Map und willst ueber den Weg Object -> String -> Object gehen ?

versteh das ganze system nicht... was soll diese Collector klasse ? da speicherst du dir doch schon das Object ?

wenns nur darum geht einen allgemeinen container zu haben fuer versch. Objekte nutze lieber generics
 
€: ein Aufruf sollte dann so etwa aussehen:
Java:
Object tmp = (map.getTYPE) map.getOBJ();

Was wäre dadurch gewonnen? Selbst wenn das klappen würde, ist das ein überflüssiger Cast.
Casting ist keine Typumwandlung[*].
Wie erzeugst du denn die Objekte in der Map, also von welchem Typ ist
Code:
map.getOBJ()
?


[*] primitive Number-Typen mal ausgenommen
 
weil ich mehrer Objekte habe, die aktiviert/deaktiviert werden müssen, wenn eine bestimmt aktion eintritt. Da es sich um verschieden handelt, muss ich ja diese später wieder ansprechen.
Da ich nicht schreiben kann:
Java:
Object obj = OBJ; [OBJ = funktionsparameter]
obj.setEnabled(true);

muss ich erst wieder das Objekt wieder zum ausgangsobjekt machen, sonst kann ich damit nicht arbeiten

und wie soll ich den vollqulifizierten namen in die Klammern () bekommen? (Wie ich den Namen bekomme weis ich, aber wie ich damit weiterarbeiten soll, ist mir schleierhaft)

MFG

Tomate_Salat
 
Was wäre dadurch gewonnen? Selbst wenn das klappen würde, ist das ein überflüssiger Cast.
Casting ist keine Typumwandlung[*].
Wie erzeugst du denn die Objekte in der Map, also von welchem Typ ist
Code:
map.getOBJ()
?


[*] primitive Number-Typen mal ausgenommen

ach verdammt, ich merke gerade meinen Denkfehler *kopf-auf-tisch-hau*

€: dann müsste das so etwa aussehen
Java:
map.getOBJ() objekt = (map.TYPE()) obj;
 
Schon [c]java.awt.Component[/c] besitzt [c]setEnabled(boolean)[/c]. Wenn du sowieso nur Components speicherst, kannst du [c]((Component) obj).setEnabled(true);[/c] verwenden.
 
wenn es dir nur um das setEnabled geht... das kommt von JComponent ... dann speicher doch einfach deine Objekte als JComponent

dann kannst du auf diese dann ohne cast / umwandlung oder was uch immer setEnabled aufrufen
 
hätte mir eine menge arbeit erpsart....vielen Danke =) endl. kann ich weiter arbeiten 😛

MFG

Tomate_Salat
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben