ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
1141
1141
EMPFEHLEN
-
26.07.06 23:33 #1
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Hier mal ein Beispiel wie man dynamisch zur Laufzeit getypte Datenmodelle erzeugen kann:
Code java: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
/** * */ package de.tutorials; /** * @author Tom * */ public class DataModelProxyFactoryExample { /** * @param args */ public static void main(String[] args) { IDataModel dataModel = DataModelProxyFactory.createModel(IDataModel.class); dataModel.setData("ABC"); dataModel.setValue(1337); System.out.println(dataModel.getData()); System.out.println(dataModel.getValue()); System.out.println("###############"); IGenericDataModel<String, Integer> genericDataModel = DataModelProxyFactory.createModel(); genericDataModel.setBubu("Hallo"); genericDataModel.setGugu(4711); System.out.println(genericDataModel.getBubu()); System.out.println(genericDataModel.getGugu()); } }
Code java: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
package de.tutorials; interface IDataModel{ String getData(); void setData(String s); int getValue(); void setValue(int value); } /** * */ package de.tutorials; /** * @author Thomas.Darimont * */ public interface IGenericDataModel<TBubu,TGugu> { TBubu getBubu(); void setBubu(TBubu data); TGugu getGugu(); void setGugu(TGugu data); }
Code java: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
/** * */ package de.tutorials; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; public class DataModelWrapper implements InvocationHandler { Map<String, Object> propertyNameToValueMap = new HashMap<String, Object>(); Class<?> wrappedClass; public DataModelWrapper(Class<?> wrappedClass) { this.wrappedClass = wrappedClass; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (wrappedClass.equals(method.getDeclaringClass())) { String methodName = method.getName(); if (methodName.startsWith("get")) { String attributeName = getAttributeName(method.getName()); return propertyNameToValueMap.get(attributeName); } else if (methodName.startsWith("set")) { String attributeName = getAttributeName(method.getName()); propertyNameToValueMap.put(attributeName, args[0]); return null; } } return null; } private String getAttributeName(String name) { return Character.toLowerCase(name.charAt(3)) + name.substring(4); } }
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/** * */ package de.tutorials; import java.lang.reflect.Proxy; public class DataModelProxyFactory { @SuppressWarnings("unchecked") public static <TTargetType> TTargetType createModel(Class<?> clazz) { return (TTargetType)Proxy.newProxyInstance(clazz.getClassLoader(), new Class[] { clazz }, new DataModelWrapper(clazz)); } public static <TTargetType> TTargetType createModel(TTargetType ... args) { Class<?> targetInterface = args.getClass().getComponentType(); return createModel(targetInterface); } }
Hierbei muss nun nun nur noch die Interfaces für die domänenspezifischen Datenmodelle spezifizieren
und über die DataModelProxyFactory wird dann dynamisch ein auf das Interfaces getyptes Model erzeugt.
Auf dieses Modell kann man dann über die im Interface definierten Methoden (getyped) zugreifen.
equals/hashCode/toString muss man dann auch entsprechend intercepten...
Btw. in C# schaut das ganze dann so aus:
http://www.tutorials.de/forum/net-ca...c-proxies.html
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Object zu laufzeitobjects zu Laufzeit dynamisch erzeugen
Von malandro im Forum JavaAntworten: 4Letzter Beitrag: 01.11.06, 14:32 -
Bilder dynamisch zur Laufzeit beschriften
Von nero_85 im Forum PHPAntworten: 6Letzter Beitrag: 15.11.05, 08:02 -
Dynamisch (Zur Laufzeit) Kompilieren
Von Thomas Darimont im Forum JavaAntworten: 0Letzter Beitrag: 11.09.04, 20:21 -
Komponenten zur Laufzeit erzeugen
Von mikeNRG im Forum C/C++Antworten: 2Letzter Beitrag: 20.06.04, 18:24 -
pictureboxes bei Laufzeit erzeugen
Von FWerewolf im Forum .NET ArchivAntworten: 2Letzter Beitrag: 15.12.03, 16:47






Zitieren
Login





