2016-11-01 3 views
0

私はアンドロイド開発のためにscala-reflectパッケージを使用しようとしています。 私はbuild.sbtでScalaの-反映依存関係を追加しました:sbt-android:andaroidのscala-reflectを使用できません:java.rmi.Remoteが見つかりません

libraryDependencies += "org.scala-lang" % "scala-reflect" % "2.11.8" 

が、私は例外を取得:私はjava.rmi.Remotejava.rmi.RemoteExceptionのJavaソースを追加しようとしました

java.lang.NoClassDefFoundError: Failed resolution of: Ljava/rmi/Remote; 
           at scala.reflect.internal.Definitions$DefinitionsClass.RemoteInterfaceClass$lzycompute(Definitions.scala:370) 
           at scala.reflect.internal.Definitions$DefinitionsClass.RemoteInterfaceClass(Definitions.scala:370) 
           at scala.reflect.runtime.JavaUniverseForce$class.force(JavaUniverseForce.scala:255) 
           at scala.reflect.runtime.JavaUniverse.force(JavaUniverse.scala:16) 
           at scala.reflect.runtime.JavaUniverse.init(JavaUniverse.scala:147) 
           at scala.reflect.runtime.JavaUniverse.<init>(JavaUniverse.scala:78) 
           at scala.reflect.runtime.package$.universe$lzycompute(package.scala:17) 
           at scala.reflect.runtime.package$.universe(package.scala:17) 

をして構築されましたandroid:package --core-libraryのプロジェクト(sbtがdexCoreLibraryオプションを見つけられなかったため)、正常にビルドされましたが、ランタイムエラーが発生しました。

それで、そうでなければjava.rmiの依存関係を追加できますか?scala.reflectはそれを使用できますか?

私は、メソッドのOption.orDefaultの実装のコンテキストでscala.reflectライブラリを使用しています:

class RichOption[+A : TypeTag](val delegate: Option[A]) { 

    def orDefault : A = delegate.getOrElse { 
    delegate match { 
     case t if typeOf[A] <:< typeOf[Int] => 0.asInstanceOf 
     case _ => throw new IllegalAccessException("there is no default value for this type.") 
    } 
    } 


} 

あなたはおそらくscala.reflectなしOption.orDefault (のためのより良い実装を知っている場合)、 私にお知らせください。

答えて

1

はるかに良い:

case class Default[A](value: A) 
object Default { 
    implicit val intDefault: Default[Int] = Default(0) 
    // other Default implementations 
} 

class RichOption[+A](val delegate: Option[A])(implicit d: Default[A]) { 
    def orDefault : A = delegate.getOrElse(d.value) 
} 

定義されたデフォルト値を持たないタイプで使用した場合は、コンパイルエラーの代わりに、ランタイムエラーを取得し、複雑なマッチング、大規模な依存関係は必要ありません、

関連する問題