HINWEIS: Diese Frage ist in erster Linie theoretisch; Ich habe seitdem aufgegeben sofort zu verwenden, da alles, was ich mir ausgedacht habe, meinen Code verschleiert und ein wenig wie ein Antipattern riecht. Allerdings finde ich es theoretisch interessant und würde die Hilfe der Community damit lieben.Kann ein Java-Argument durch eine in einem anderen Objekt enthaltene Klasse typgebunden sein?
Ich überarbeite einige Code um die Jahrhundertwende für die Bildbearbeitung überarbeitet; Zunächst wird eine einzelne Klasse mit vielen Redundanzen in eine Reihe von BiFunction-Filtern zerlegt. Sie akzeptieren jeweils ein BufferedImage und eine Intensität (Double) und geben ein neues BufferedImage zurück. Natürlich haben viele dieser Bildfilter zusätzliche Bedenken, wie zum Beispiel den Wirkungsradius oder eine andere Intensität, und wenn ich sie effizient ketten möchte, würde ich gerne in der Lage sein, diese als "Uniformen" (oder quasi als "Uniformen" zu setzen) -Konstanten) vor der Verwendung.
Meine aktuelle Methode besteht einfach darin, meine ImageFilter-Klasse weiter zu erweitern und die Uniformen als Bean-Style-Eigenschaften festzulegen. Was ich anfangs gedacht tut, um sie zu einer allgemeinen Klasse beschränke, die in einer Schnittstelle gehalten wurden, und mit etwas entlang der Linien von:
public void addProperty(Uniform<T> property, T type)
dort, wo T durch die Uniform vollständig spezifiziert ist.
Die ursprüngliche Klasse behielt alle diese Uniformen in einer HashMap nach String-Namen, aber das ist der Beginn einer Menge schlechter Gewohnheiten und ich räume es jedes Mal auf, wenn ich es sehe. Wenn ein Rechtschreibfehler dazu führt, dass der Code fehlschlägt, handelt es sich um einen unverantwortlichen Code. Ich würde es vorziehen, dort einfach einen Singleton zu benutzen, wie ein Erwachsener.
Zusammengefasst, ist es in Java möglich, einen Parametertyp an das generische eines anderen Parameters zu binden? Wenn das so ist, wie? Wenn nicht, weiß jemand von irgendwelchen Plänen, Java Generics in der Zukunft in solch einer Weise zu erweitern?
Danke für jede Eingabe!
Wie schwer es Ihrer Meinung nach könnte es zu versuchen sein und uns sagen, was der Compiler sagt? –
@HankD Ich denke, ich habe bereits erklärt, dass es nicht als gültiger Code bekannt ist. Es kompiliert nicht. Wenn Sie diesen Code tatsächlich eingeben, wird der Compiler einwenden, dass T nicht in einen Typ aufgelöst werden kann. Die Frage ist, ob dies eine allgemeine Wahrheit ist oder gibt es eine Syntax oder ein Muster, die das Problem lösen? –
immer noch nicht sicher, was du meinst, warum 'public void addProperty (Uniform Eigentum, T-Typ)' ist nicht das, was Sie wollen? –
HuStmpHrrr