Betrachten Sie das folgende Beispiel:Was ist das Konzept hinter CAP # 1 in generischer JACA (Wildcard)?
class First<T >
{
T s;
First(T s)
{
this.s=s;
}
void setS(T s)
{
this.s=s;
}
void getS()
{
System.out.println(s);
}
}
class Use
{
public static void setFirst(First<?>f)
{
f.setS(7);
}
public static void main(String[] args)
{
First <Integer> f4 = new First<Integer>(5);
f4.getS();
setFirst(f4);
}
}
Ich weiß, dass Compiler einen Fehler geben, weil bestimmte Schreiboperationen in einem Verfahren nicht erlaubt, deren formale Parameter für Generika Wild-Card verwendet. Compiler-Fehler ist:
[email protected]:~/codes/java/generics$ javac -Xdiags:verbose *.java
Use.java:5: error: method setS in class First<T> cannot be applied to given types;
f.setS(7);
^
required: CAP#1
found: int
reason: argument mismatch; int cannot be converted to CAP#1
where T is a type-variable:
T extends Object declared in class First
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
1 error
[email protected]:~/codes/java/generics$
Es sieht aus wie CAP # 1 ist ein Datentyp. Ich weiß nichts über dieses Konzept. Bitte helfen Sie.
See [* Wildcard Capture and Helper-Methoden *] (https: // docs.oracle.com/javase/tutorial/java/generics/capture.html). – trashgod