Generische Klasse

Ja. Allerdings beschränken sich meine Erfahrungen auf das verlinkte Beispiel aus meinem letzten Beitrag. Und auch die Arbeitsweise in Spring in Bezug auf die cglib ist mir unbekannt.
 
Mein Vorschlag wäre, dass du es so machst.

Java:
package de.tutorials.cglib;

import net.sf.cglib.proxy.Enhancer;

public class GenericCGlibExample<T> {
	
	private Enhancer enhancer = new Enhancer();
	private Class clazz = null;
	
	public GenericCGlibExample(Class<T> clazz) {
		setClazz(clazz);
		enhancer.setSuperclass(clazz);
	}

	public Class getClazz() {
		return clazz;
	}

	private void setClazz(Class clazz) {
		this.clazz = clazz;
	}
	
	public T createObject(){
		return (T)enhancer.create();
	}
	
	public T createObject(Class[] classes, Object[] objects[]){
		return (T)enhancer.create(classes, objects);
	}
	
	
	public static<T> T createObject(Class<T> clazz){
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(clazz);
		
		return (T)enhancer.create();
	}
	
	public static<T> T createObject(Class<T> clazz, Class[] classes, Object[] objects[]){
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(clazz);
		
		return (T)enhancer.create(classes, objects);
	}

}

Du musst hier natürlich noch die Interceptoren setzen wie in Toms Beispiel. Du könntest, wenn du nur ein Object haben willst, dass beobachtet wird mit den static Methoden erstellen. Aber wenn du halt noch andere Sachen abfragen möchtest, kannst du ja einfach die Klasse um Methoden erweitern und dann ein Object von dieser Klasse anlegen.

Ich hoffe ich hab mich verständlich ausgedrückt.

MFG

zEriX
 
@Zerix:Ich kann zwar von diesem erweiterten Objekt immernoch nicht auf die Methoden der Klasse mit dem Enhancer zugreifen, aber ich glaube auch, dass das wohl einfach nicht geht.
Aber dein Vorschlag hilft mir echt weiter. Ich hab meine Klasse jetzt auf deinen Vorschlag hin angepasst und das sieht doch schon viel besser aus.
Danke

@Thomas: Nein. In dem Thread ging es darum wie man grundsätzlich Methoden überwacht. Aber hier wollte ich ja wissen, wie ich es anstelle einer Klasse A ein Typ zu übergeben, den sie sich selbst als Superklasse übernimmt, sodass ich auf die Methoden von A und B zugreifen kann.
 
Zuletzt bearbeitet:
Zurück