0

私は古いJavaAPIに依存しています。これは、データが欠落している場合にnullポインター例外をスローするのが大好きです。オプションタイプのアクセサーを持つサブクラスを作成したいのですが、安全なアクセサーを作成する必要があると判断するまで、古いアクセサーを保持します。元のオブジェクトのコピーからサブクラスを作成する良い方法はありますか?次のようなことを実現したいと思います。

SafeIssue extends Issue {
  def safeMethod: Option[Value] = { //... }
}


val issue = oldapi.getIssue()
val safeIssue = SafeIssue(issue)

//Preserves issue's methods and data if I need them
val unsafeVal = safeIssue.unsafeMethod
val maybeVal  = safeIssue.safeMethod
4

1 に答える 1

4

代わりに暗黙の変換を試してみませんか?これは、独自のオブジェクトを作成することを好むJavaAPIでより適切に機能します。だからあなたは

class SafeIssue(issue: Issue) {
  def original = issue
  def safeFoo = Option(issue.foo)
  // ...  You must write any of these you need
}
implicit def make_issues_safe(issue: Issue) = new SafeIssue(issue)

次に、メソッドを提供している限り、次のように記述できます。

val yay = Issue.myStaticFactoryMethodThing.safeFoo.map(x => pleaseNoNull(x))

(その後、コードで持ち運ぶSafeIssueか持ち歩くかを決定でき、公開されたメソッドを使用していつIssueでも元に戻すことができます(またはパラメーターをaにすることができます)。IssueSafeIssueoriginalissueval

于 2012-08-07T17:41:22.060 に答える