Ich habe eine statische Methode in einigen Legacy-Code, der von mehreren Clients aufgerufen wird. Ich habe offensichtlich keine Optionen, um es zu überschreiben oder das Verhalten durch die Abhängigkeitsinjektion zu ändern. Ich bin nicht berechtigt, die vorhandene Klasse zu ändern.Wie ändert man das Methodenverhalten durch Reflektion?
Was ich jetzt tun möchte, ist das Verhalten (diese Methode - mit der gleichen Signatur und Rückgabetyp) mit Reflektion zu ändern.
Ist es möglich? Wenn nicht, kann irgendein Entwurfsmuster mich retten?
Danke!
EDIT: Es gibt einige Verwirrung, was ich ändern/ändern kann. Ich kann keine vorhandene Klasse/Methode ändern - aber ich kann dem Projekt weitere Klassen hinzufügen. Das Beste, was ich mit den vorhandenen Klassen tun kann, ist, sie mit Anmerkungen zu versehen. Dies alles wird getan, um zu vermeiden, dass irgend etwas in dem existierenden Code bricht - was eine komplette Testreihe für ein großes Projekt bedeutet.
EDIT 2: java.lang.Instrumentation ist nicht für Android verfügbar - oder es klingt wie eine gute Passform!
Warum Reflexion? –
Sie dürfen es nicht ändern, aber Sie dürfen es durch Reflektion ändern? Das scheint viel gefährlicher zu sein. – Keppil
Ich denke, das wird in einem Wartungsalbtraum enden. Der Code wird jeden belesen, der es liest. Geh und erhalte die Genehmigung, diese Klasse zu ändern. – SpaceTrucker