Die Verwendung von Generika Ursachen unchecked conversion-Warnung
Ich habe den folgenden code
String innerText = null;
innerText = this.getException(detail.getChildElements());
verursacht diese Warnung
Art Sicherheit: Die expression von Typ Iterator muss deaktiviert die Konvertierung zu entsprechen
zu Iterator
Die referenzierte Methode ist
private String getException(Iterator<OMElementImpl> iterator) { ... }
Die andere Methode, getChildElements()
ist in einer JAR-Datei, die ich nicht berühren kann. Es gibt keine weiteren Warnungen oder Fehler.
Vom Googeln, es scheint der übliche Weg, um loszuwerden, diese Art von Warnung ist
@SuppressWarnings("unchecked")
String innerText = this.getException(detail.getChildElements());
weil der compiler kann nicht garantieren Sicherheit vor der Zeit, aber ich würde es vorziehen zu vermeiden, mit SuppressWarnings
wenn möglich... gibt es eine bessere Möglichkeit?
EDIT: getChildElements()
dokumentiert ist hier
- Seien Sie einfach froh, dass Java generics erlauben, Ihren code zu kompilieren überhaupt. Würde ich persönlich lassen die Warnung - es ist ein absolut korrekter Warnung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du kann unterdrückt die Warnung, aber wenn Sie tun, Sie verlassen sich 100% auf die Drittanbieter-Bibliothek und somit die Qualitätssicherung von Java auf generische Typen:, dass jeder
ClassCastException
ausgelöst zur Laufzeit auftreten wird, direkt an einen expliziten cast.Unserer coding-standard ist zum unterdrücken von Warnungen nur wenn wir beweisen der code typsicher ist—und wir behandeln alle Anrufe außerhalb des Pakets als eine black box, und verlassen Sie sich nicht auf irgendwelche Kommentare über den Inhalt von raw-Kollektion. Also, die Unterdrückung ist extrem selten. In der Regel, wenn der code typsicher ist, kann der compiler bestimmen, obwohl wir manchmal haben, um ihm einige helfen. Die wenigen Ausnahmen betreffen arrays von generischen Typen, der nicht "entkommen" aus einer privaten Kontext.
Wenn Sie nicht vollständig Vertrauen, die Drittanbieter-Bibliothek, eine neue Sammlung erstellen, und fügen Sie den Inhalt nach dem Guss Sie
OMEElementImpl
. So, wenn es ein bug in der Bibliothek, erfahren Sie es sofort, anstatt einige code-weit in die Ferne, in Zeit und Raum sprengen, mit einemClassCastException
.Beispiel:
Denken Sie daran, Generika wurden nicht erfunden, um code hübsch Aussehen und benötigen weniger Tippen! Das Versprechen von Generika ist dies: Sie Ihren code garantiert Typ-sichere, wenn es compiliert ohne Warnungen. Das ist es. Wenn Warnungen werden ignoriert oder unterdrückt, code ohne cast-operator kann auf mysteriöse Weise erheben
ClassCastException
.Update: In diesem Fall, vor allem scheint es sehr riskant, anzunehmen, dass das Ergebnis
getChildElements
ist ein iterator, derOMElementImpl
. Am besten, Sie könnte davon ausgehen, dass SieOMElement
, und das auch nur implizit von der Klasse, nicht alles auf die Methode im besonderen.Iterables.transform
im Google-Sammlungen google-collections.googlecode.com/svn/trunk/javadoc/com/google/...