14

注意: Scala 2.11以降、NotNull非推奨になりました。

私が理解している限り、参照型をnull許容にしないようにする場合は、魔法の特性をミックスインする必要があります。コンパイラーは、その中に-able値をNotNull入れることを自動的に防ぎます。たとえば、nullこのメーリングリストスレッドを参照してください。

欠けているのは、null許容型ではないタイプに対する適切なライブラリサポートです。Javaコードを直接インターフェースする必要のないパッケージを作成したい場合、このパッケージのすべてのタイプがnullデフォルトで使用されないようにしたい場合は、そのようにすべての構築変数を再定義するしかありません。

//can't actually do that, but just to give the general idea
class NString extends String with NotNull
class NMap[X,Y] extends Map[X,Y] with NotNull
...

私はscalaに(コンパイラプラグインまたはライブラリとして)私が書くためのオプションがあることを期待しています

import collections.notnull._

null特定のscalaファイルでの使用を簡単に禁止するため。

標準ライブラリの多くの有用な型をnull許容でないように簡単に強制するオプションはありますか?

4

1 に答える 1

10

取引が何であるかはよくわかりませんがNotNull、ScalaはNotNull/Nullableの概念をどのように処理したいかを完全には理解していないという印象を受けます。私自身のポリシーは、Scalaでnullを使用しないことです。また、nullを返す可能性のあるJava APIを呼び出す場合は、すぐにに変換してOptionください。

このユーティリティメソッドは私の親友です:

def ?[A <: AnyRef](nullable: A): Option[A] = if (nullable eq null) None else Some(nullable)

次に、次のようなことを行います。

val foo: Option[Foo] = ?(getFooFromJavaAPIThatMightReturnNull())

これは、nullであるかどうかを追跡するよりもはるかに簡単です。

だから私はあなたの質問に全く答えませんでした、しかしそれが役に立つ場合に備えて私はこれを渡します...

更新:最近のScalaバージョンは、標準APIでこれをサポートするようになりました。

val foo: Option[Foo] = Option(getFooFromJavaAPIThatMightReturnNull())
于 2009-11-06T02:20:30.963 に答える