Variabler Cast und Klassendefinition in Java (wie $$ in PHP)?

MafiaX

Grünschnabel
Hallo,

ich weiß garnicht so recht wie ich es beschreiben (und geschweige denn suchen) soll deshalb, verzeiht mir, falls das Thema bereits irgendwo besprochen wurde. Ein Link oder Suchstichwort hierzu würde mir dann schon reichen :)

Ich suche eine Möglichlkeit in Java einen Cast und eine Klassenzuweisung dynamisch zu machen. Optimal wäre im Prinzip eine herangehensweise der Art:
Code:
String varClass = "Quadrat"; 
varClass meinViereck = (varClass) Viereck.create(4,4);
Wobei die Klasse Quadrat von Viereck abgeleitet ist und die create ne beliebiege Methode, die ein Viereck erstellt.

Gibt es etwas in der Art in Java? In PHP wird es durch $$varClass gemanagt.

mfg MafiaX
 
Hallo,

meinst du sowas?

Code:
public class App {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Quadrat quadrat = (Quadrat) Viereck.create(4, 4);

		System.out.println("Fläche = "+quadrat.getA()*quadrat.getB());
	}

}

Code:
public class Viereck {

	private int a;
	private int b;
	
	protected Viereck(int a, int b){
		setA(a);
		setB(b);
	}
	
	public static Viereck create(int a, int b){
		return new Viereck(a,b);
	}

	public int getA() {
		return a;
	}

	private void setA(int a) {
		this.a = a;
	}

	public int getB() {
		return b;
	}

	private void setB(int b) {
		this.b = b;
	}
}

Code:
public class Quadrat extends Viereck {

	protected Quadrat(int a, int b) {
		super(a, b);
		// TODO Auto-generated constructor stub
	}

}


MFG
zEriX
 
Hallo,

das was du da machen möchtest lässt sich so in java nicht realisieren... "dynamische" Casts könnte man jedoch so bauen:
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Tom
 */
public class DynamicCastExample {

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
    IFoo foo = new Bar();
    Bar bar = as(foo,Bar.class);
    System.out.println(bar);
  }

  private static <TTargetType> TTargetType as(Object o, Class<TTargetType> clazz) {
    //...
    if(null == o || null == clazz){
      return null;
    }else if(clazz.isAssignableFrom(o.getClass())){
      return clazz.cast(o);  
    }else{
      return null;
    }
  }

  static interface IFoo {}
  static class Foo implements IFoo {}
  static class Bar extends Foo {}
}

Gruß Tom
 

Neue Beiträge

Zurück