2011-09-28 11 views
5

Ho un oggetto Java OldFashioned che si estende Java 1.4 List:Come aggiungere un oggetto a Elenco Java non parametrizzato?

[Java] 
class OldFashioned extends List { ... } 

Cioè, OldFashioned non accetta parametri di tipo. Devo aggiungere SomeObject ad esso. In Java non c'è alcun problema, dal momento che tratta List 1.4 come List<Object> 1.5 e consente di aggiungere sottoclassi di Object alla raccolta. Ma Scala no. Così la prossima codice non funziona:

[Scala] 
val oldFashioned = new OldFashioned() 
oldFashioned.add(new SomeObject)  // found: SomeObject; required: E 

Cioè, Scala compilatore richiede di passare parametri di tipo a OldFashioned che in realtà non prende loro:

[Scala] 
var oldFashioned: OldFashioned[SomeObject] = null // OldFashioned does not take type parameters 

Come posso superarla e aggiungi SomeObject a OldFashined?

risposta

8

Ok, non posso credere che uno dei miei earlier question trova un utilizzo qui (si dovrebbe andare di agilesteel upvote answer)

def add(oldFashioned: OldFashioned, any: Any): Boolean = oldFashioned match { 
    case l: java.util.List[a] => l.add(any.asInstanceOf[a]) 
} 

val oldFashioned = new OldFashioned 
// oldFashioned: OldFashioned = [] 

add(oldFashioned, "test") 
// res0: Boolean = true 
add(oldFashioned, 1) 
// res1: Boolean = true 
add(oldFashioned, new Object) 
// res2: Boolean = true 

oldFashioned 
// res3: OldFashioned = [test, 1, [email protected]] 

Edit: Credo che il tempo che ho intenzione di lanciare:

oldFashioned.asInstanceOf[java.util.List[SomeObject]].add(new SomeObject) 
+0

FACILMENTE, IDEA evidenzia '[a]' come errore, ma il compilatore di Scala non reclama, quindi funziona. Upvotes sia per le vostre risposte che per quelle di agilesteel. Grazie! – ffriend

+0

Ho già iniziato a chiedermi, perché una delle mie vecchie risposte stava facendo un paio di revisioni all'improvviso;) Grazie proprio a te! – agilesteel

Problemi correlati