2010-03-23 4 views
5

Ich versuche, einige Warnungen in einigen alten Java-Code (in Eclipse) aufzuräumen, und ich bin mir nicht sicher, was das Richtige in diesem Fall zu tun ist. Der Block sieht mehr oder weniger wie folgt aus:Was ist der richtige Weg, um die Eclipse-Warnung zu beheben "ist nicht parametrisiert"?

Transferable content = getToolkit().getSystemClipboard().getContents(null); 
java.util.List clipboardFileList = null; 

if(content.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { 
    try { 
    clipboardFileList = (java.util.List)content.getTransferData(
     DataFlavor.javaFileListFlavor); 
    } 
    /* Do other crap, etc. */ 
} 

Die Liste eine Warnung erzeugt, da es nicht parametriert ist, aber wenn ich es mit <File> parametrieren, die ich bin ziemlich sicher ist, was es erfordert, es klagt dass es nicht von Object zu List<File> konvertieren kann. Ich könnte einfach die ungeprüfte Warnung für die Funktion unterdrücken, würde es aber lieber vermeiden, wenn es eine "gute" Lösung gibt. Gedanken?

+0

Also gibt getTransferData() ein Objekt zurück? –

+0

Whoops, hat die Zeile weggelassen, die sagt, was Inhalt ist. – Morinar

Antwort

6

würde ich empfehlen, das Ergebnis zu List<File> und zur Unterdrückung der Warnung ausdrücklich Gießen. Nach the documentation:

public static final DataFlavor javaFileListFlavor

Um eine Liste von Dateien zu/von Java (und der zugrunde liegenden Plattform) ein DataFlavor dieser Typ/Subtyp und Repräsentationsklasse java.util.List übertragen verwendet wird. Jedes Element der Liste muss vom Typ java.io.File sein.

In einer solchen Situation, wo die Dokumentation eindeutig den Datentyp definiert, fühlen sich frei, um die Warnungen zu ignorieren, da pro Punkt 24 von Joshua Bloch Effective Java (Seite 116):

Wenn Sie nicht können Beseitigen Sie eine Warnung und Sie können nachweisen, dass der Code, der die Warnung ausgelöst hat, typsicher ist, und dann (und nur dann) die Warnung mit einer @SuppressWarnings("unchecked") Annotation unterdrücken.

+0

Das ergibt für mich Sinn und eine Art der Richtung, in die ich mich gelehnt habe. Nur neugierig, ob es eine "bessere" Lösung gab. – Morinar

+0

@Morinar: Verständlich. Der Zweck der Antwort war es, die Gründe für die Entscheidung eines Experten (Joshua Bloch) darzulegen. :) –

4

Versuchen Sie, diese

java.util.List<?> 
+0

Das scheint den Trick zu machen. Das nur zu sagen, dass ich nicht weiß, was der Typ ist? Oder ist es komplizierter? – Morinar

+2

@Morinar, es tut ein wenig mehr: Es sagt, dass die Liste von einem bestimmten Typ ist, der unbekannt ist - während der unformatierte Typ bedeutet, dass es eine Liste ist, die Elemente verschiedener Typen enthalten kann (und daher nicht typsicher ist). –

0

ich Sie nicht denken müssen <?> verwenden. Das funktioniert einfach gut für mich?

Object obj = null; 
List<File> aa = (List<File>)obj; 
+0

Sorry, ich war nicht klar. Es ist nicht so, dass es das nicht tun kann, es ist, dass es eine "Ungeprüfte Umwandlung von Objekt zu Liste " ist. – Morinar

+0

Oh. Tut mir leid, ich benutze IDEA und es gab keine Warnungen. –