Nachträglich neue Interfaces hinzufügen

vorhergehende Artikel in: Java Komponenten
11.09.2015

Ich kam neulich in eine Situation, in der ich Softwarekomponenten mit einem Interface ausstatten wollte, das Methoden beinhaltete, die die Klasse java.awt.Component ebenfalls beinhaltete. Alles, was ich mit meiner neuen Komponente tun konnte, hätte ich also auch mit Klassen des Typs java.awt.Component tun können - leider lässt sich aber nachträglich kein weiteres Interface hinzufügen - was also tun?

Ich habe dazu mal den Quelltext einer Klasse hier unten angefügt, der auch gleich meine Lösung des Problems demonstriert:

Die Testklasse

import java.awt.Component;
public class GeometryTest
{
	public static void main(java.lang.String[] args)
	{
		java.awt.Component comp = new java.awt.Button();
		Geometry proxy = (Geometry) java.lang.reflect.Proxy.newProxyInstance(
				GeometryTest.class.getClassLoader(),
				new Class[]
				{
					Geometry.class
				},
				new Handler(comp));
		System.out.println(comp.getBounds());
		callForGeometry(proxy);
		System.out.println(comp.getBounds());
	}
	private static void callForGeometry(Geometry geometry)
	{
		geometry.setBounds(new java.awt.Rectangle(10, 11, 12, 13));
	}
}

Das neue Interface

public interface Geometry
{
	public void setBounds(java.awt.Rectangle bounds);
	public java.awt.Rectangle getBounds();
}

Das Herzstück

class Handler<T> implements java.lang.reflect.InvocationHandler
{
	private final T proxied;

public Handler(T proxied) { this.proxied = proxied; } public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws Throwable { java.lang.reflect.Method m = proxied.getClass().getMethod(method.getName(), method.getParameterTypes()); return m.invoke(proxied, args); } }

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • 8TB Raid5 mit Raspberry Pi

    25.04.2020

    Ich habe mir neulich überlegt, ob man einen Pi als Raid benutzen könnte - aber nicht mit dem ewig gleichen Setup mit 4 USB-Sticks...

    Weiterlesen...

Neueste Artikel

  • Watch David Byrne Lead a Massive Choir in Singing David Bowie’s “Heroes”

    Durch die Seite Open Culture bin ich auf diesen spektakulären Auftritt aufmerksam geworden:

    Weiterlesen
  • Zufälliges Füllen der Ebene

    Ich fand neulich einen sehr interessanten Artikel Zum Thema der algorithmischen Erzeugung von dekorativen (obwohl - das liegt im Auge des Betrachters) Bildern.

    Weiterlesen
  • Sicherheit beim Fernzugang per SSH

    Ich habe vor einiger Zeit bereits zwei Vorträge gestaltet und dafür meine Ideen zur unkomplizierten Erstellung von Präsentationen genutzt - nun ist ein weiterer hinzugekommen.

    Weiterlesen

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.