Scala から Java を扱う場合、null を考慮する必要があります。
たとえば、HttpServletRequest ゲッター (getAttribute、getHeader など) はすべて null を返す可能性があります。
HttpServletRequest メソッドを呼び出すたびに手動で case/match または map 操作を実行できることはわかっていますが、それは少し面倒です。また、request.getHeader("Accept-Encoding") のようなメソッド呼び出しは一口です。
両方の問題を処理するためのエンリッチメントを思いつきました。
class Servlet_Request_Provides_NullSafe_Getters (r: HttpServletRequest) {
def header(s: String) = Option( r.getHeader(s) )
def attrib(s: String) = Option( r.getAttribute(s) )
def remoteHost = Option( r.getRemoteHost )
def accepts = header("Accept-Encoding")
}
implicit def request2Option(r: HttpServletRequest) =
new Servlet_Request_Provides_NullSafe_Getters(r)
1) 同じ/類似の効果を達成するために、enrich-my-library 以外の別の/より良い方法はありますか?
2)これが「その」方法である場合、パフォーマンスへの影響/リスクは何ですか?言い換えれば、このパターンの明白な有用性/利便性にやけどをすることはありますか?
これが明らかな場合は申し訳ありませんが、先日強化を開始したばかりで、非常に便利なようです。適切なシナリオでパターンを適用していることを確認したいだけです...
EDIT
@dhg は、 Option.apply() と次のことを指摘しました。
def safe[T](v: T) = v match {
case null => None
case x => Some(x)
}
同等であるため、getter メソッドは無関係な safe(f()) ラッパーの代わりに Option(f()) を使用するようになりました
ありがとう