2011-07-15 30 views
8

La mia classe Java è la seguenteCome accedere alle enumerazioni Java da Scala?

public class Test { 

    protected enum TestEnum {A, B, C}; 

    public Test(TestEnum te) { 

    } 

} 

qui è la mia Scala

class ScalaEnum(myEnum: TestEnum) extends Test(myEnum) { 

} 

ricevo il seguente messaggio di errore

classe TestEnum in Test oggetto non è accessibile in oggetto L'accesso di prova per protetto la classe TestEnum non è consentita poiché racchiudere la classe classe ScalaEnum nel pacchetto XXX non è una sottoclasse di oggetto Test nel pacchetto YYY dove è definito l'obiettivo

risposta

2

Come ha detto @Alex e @ Jean-Phillipe, questo non ha molto a che fare con il fatto che si sta tentando di accedere a una enumerazione e più a che fare con il fatto che le enumerazioni della classe interna sono implicitamente statiche: vedere this answer , per esempio.

Ciò significa che stai correndo contro this limitation. Cambiare TestEnum in pubblico funziona per quanto riguarda il problema con Scala 2.9.1.

Detto questo, nonostante le veementi veementi di Martin di rimuovere la limitazione, il tuo codice funziona come previsto con Scala 2.10.

0

Sembra che la classe enum sia implicitamente statica, perché Scala la chiama "oggetto Test". Prova a qualificarlo nel costruttore (ad esempio Test.TestEnum) e, se non funziona, rilassare la visibilità dell'accesso al pacchetto.

+2

Esattamente. [L'interoperabilità con classi interne statiche protette è limitata] (http://www.scala-lang.org/node/1381). –

+0

Ho ancora ricevuto l'errore se cambio in pubblico – deltanovember

+0

OK, e se si qualifica il nome? :) –

Problemi correlati