Ich habe eine Klasse mit einem beschränkten Typ-Parameter mit verschachtelten Wildcard Typen begrenzt. In der Klasse muss ich die Typen der gebundenen verschachtelten Parameter in mehreren Methoden verwenden. Gibt es eine Möglichkeit, den beschränkten Wildcards-Typ stattdessen als generischen Typparameter zu definieren oder ihn einem allgemeinen Variablennamen zuzuweisen, sodass er leicht an mehreren Stellen referenziert werden kann?Java verschachtelte Platzhalter gebunden Typen mehrere Male oder als generische Typparameter
Die Art und Weise die Klasse nun umgesetzt wird, ist wie
class AbstractManager<F extends Filter<? extends Criteria<? extends Type>>>
{
protected void setFilter(F filter)
{
setCriteria(f.getCriteria());
}
protected <T extends Criteria<? extends Type>> void setCriteria(List<T> criteria)
{
}
protected <T extends Criteria<? extends Type>> void doSomethingWithCriteria(List<T> criteria)
{
...
}
}
, die nicht wirklich die Art der Liste auf die Art des Filters gebunden schränkt aber gut genug, um in unserer Situation. Idealerweise wäre der Typ der Liste auf den Typ des Filters beschränkt, der ein Konstrukt verwendet, das den abgeleiteten Typ des Filters an einen Namen binden könnte, der einem Parameter des beschränkten Typs auf einer Methode ähnelt, aber stattdessen auf Klassenebene.
Grundsätzlich würde ich so etwas wie
class <G extends Criteria<? extends Type> AbstractManager<F extends Filter<G>>
Von tun, was ich weiß und finden kann, ist dies nicht möglich ist, aber ich hatte gehofft, dass vielleicht war es eine obskure Feature oder eine neue Funktion in Java 7 auf, würde dies möglich machen. Ich weiß, es ist möglich, einen zweiten Typ Parameter wie
class AbstractManager<F extends Filter<G>, G extends Criteria<? extends Type>>
angeben, aber ich möchte nicht, dass die Kind-Klassen G müssen angeben, wenn der Compiler es bestimmen kann.
Die einzig mögliche Option/Lösung Ich finde der Lage gewesen ist, eine flache Unterklasse mit Factory-Methoden in der solution Nested Type Parameters in Java und in Java generics - use same wildcard multiple times
können Sie ein Beispiel, was Endergebnis Sie wünschen? –