was ist der Unterschied zwischen ? und T in der Klasse und Signaturen?
warum
public interface ArrayOfONEITEMInterface <T extends ONEITEMInterface>{
public List<T> getONEITEM();
}
kompilieren, aber nicht
public interface ArrayOfONEITEMInterface <? extends ONEITEMInterface>{
public List<?> getONEITEM();
}
was ist der Unterschied zwischen ? und T in der Klasse und Signaturen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
?
ist eine wildcard und bedeutet alle Unterklasse vonONEITEMInterface
einschließlich sich selbst.T
ist ein bestimmten Umsetzung vonONEITEMInterface
in diesem Fall.Seit
?
ist ein Platzhalter, es gibt keine Beziehung zwischen Ihrem?
in die Deklaration der Klasse und die?
in Ihrer Methode Erklärung damit es nicht kompilieren. NurList<?> getONEITEM();
wird kompiliert wenn.Den ersten Szenario bedeutet, dass die ganze Klasse behandeln kann genau eine Art von
Bar
pro Instanz.Den zweite Szenario ermöglicht jede Instanz operieren alle Subtyp
Bar
T ist ein Platzhalter für einen Typ, der durch eine Implementierung oder instanziieren der Klasse.
? ist ein Platzhalter und sagt: "ich weiß nicht, oder Pflege, was der generische Typ ist" in der Regel verwendet, wenn die Arbeit, die Sie tun auf dem container-Objekt nicht benötigen, um zu wissen, die Art.
Der Grund, warum Sie nicht verwenden können,'? ' in der Klassen - /interface-definition ist, weil es das Wert ist, sagen, definieren Sie den Namen für den Platzhalter (und der Typ an einer anderen Stelle). Putting ein"? " macht keinen Sinn.
Außerdem der Platzhalter muss nicht T, es kann jeder standard-Java-variable. Durch Konvention, es ist ein Hauptstadt-Charakter, muss aber nicht sein.
Die Klausel
<T extends ONEITEMInterface>
ist zu deklarieren, geben Sie parameter mit dem NamenT
. Damit können Sie Ihre generischen Typ,ArrayOfONEITEMInterface
, um auf die parameter an anderer Stelle. Sie können beispielsweise deklarieren Sie eine Methode, wievoid add(T t)
.Ohne Nennung der Typ-parameter, wie würden Sie finden es? Wenn Sie noch nie finden Sie die Typ-parameter warum ist das Ihre Art Generika auf dem ersten Platz? Zum Beispiel, brauchen Sie nicht ein parametrisierter Typ, so etwas zu tun:
Macht es keinen Sinn zu erklären, ein anonymer Typ-parameter, so ist es syntaktisch illegal.
? ermöglicht es Ihnen, eine Liste von Unbekannten Arten, wo, wie T erfordert eine bestimmte Art.