Ik wil het volgende... Ik heb een berg classes die allemaal de zelfde interface implementeren, welke gewoon leeg is, puur om aan te geven dat de classes op de een of andere manier toch met elkaar verbonden zijn 
Verder zijn er een berg getters en setters, en wat annotations, maar die laatste zijn even niet zo belangrijk, laat ik dus maar even weg. Zoiets dus bijvoorbeeld:
Wat ik nu wil, zijn methodeaanroepen naar getNaam en setNaam dynamisch afvangen. Dat kan prima in Java, probleem is alleen dat je daarvoor een interface nodig hebt. En dat is nu precies dat ik niet wil
Er zijn namelijk nogal wat van die Aap classen, en om voor iedere ook nog weer een Interface te maken is gewoon zonde. Liever niet dus!
Goed... Die java.lang.reflect.Proxy verwacht dus een interface. Die kan ik natuurlijk wel maken. Heb dus wat code gemaakt om dynamisch een interface Class te maken met alle public methoden van de oorspronkelijke classe, evenals een implementatie hiervan, en het geheel dynamisch te compileren en te laden.
Allemaal mooi en aardig... maar hier heb ik niets aan...
Als ik namelijk met Proxy.newProxyInstance een Proxy aanmaak krijg ik iets van type InterfaceAap terug. In mijn applicatie gebruik ik echter gewoon Aap. Helaas implementeert Aap InterfaceAap niet
Wat ik dus zoek is een manier om dit toch voor elkaar te krijgen...
Ik heb een oud topic gevonden uit 2004 met een vergelijkbaar probleem, maar helaas vind ik ook daar mijn antwoord niet.
Een mogelijke oplossing van het probleem zou kunnen zijn om in ProxyAap alle methodes nogmaals te implementeren, en via die wel een eigen invocationhandler aanroepen. Dat is best nasty, maar misschien de enige weg (buiten het gebruik van interfaces).
Misschien hebben jullie nog een idee
Verder zijn er een berg getters en setters, en wat annotations, maar die laatste zijn even niet zo belangrijk, laat ik dus maar even weg. Zoiets dus bijvoorbeeld:
Java:
1
2
3
4
5
6
7
| public class Aap implements DierentuinDier{ public String getNaam(){...} public void setNaam(String naam){..} ... meer meuk ... } |
Wat ik nu wil, zijn methodeaanroepen naar getNaam en setNaam dynamisch afvangen. Dat kan prima in Java, probleem is alleen dat je daarvoor een interface nodig hebt. En dat is nu precies dat ik niet wil
Goed... Die java.lang.reflect.Proxy verwacht dus een interface. Die kan ik natuurlijk wel maken. Heb dus wat code gemaakt om dynamisch een interface Class te maken met alle public methoden van de oorspronkelijke classe, evenals een implementatie hiervan, en het geheel dynamisch te compileren en te laden.
Java:
1
2
3
4
5
6
| public interface InterfaceAap implements DierentuinDier{ public String getNaam(); public void setNaam(String naam); } |
Java:
1
2
| public class ProxyAap extends Aap implements InterfaceAap { } |
Allemaal mooi en aardig... maar hier heb ik niets aan...
Als ik namelijk met Proxy.newProxyInstance een Proxy aanmaak krijg ik iets van type InterfaceAap terug. In mijn applicatie gebruik ik echter gewoon Aap. Helaas implementeert Aap InterfaceAap niet
Wat ik dus zoek is een manier om dit toch voor elkaar te krijgen...
Ik heb een oud topic gevonden uit 2004 met een vergelijkbaar probleem, maar helaas vind ik ook daar mijn antwoord niet.
Een mogelijke oplossing van het probleem zou kunnen zijn om in ProxyAap alle methodes nogmaals te implementeren, en via die wel een eigen invocationhandler aanroepen. Dat is best nasty, maar misschien de enige weg (buiten het gebruik van interfaces).
Misschien hebben jullie nog een idee
Do diamonds shine on the dark side of the moon :?