2017-11-14 10 views
1
// scala code 
    val nameHasUpperCase = name.exists(_.isUpperCase) 

、このような制御の抽象化は、同様に、Javaで可能です。 抽象化機能を持つ のメソッドを含むインターフェイスを定義する必要があります。あなたは、文字列の上に クエリをサポートしたい場合たとえば、あなただけの1の方法、hasPropertyを持って CharacterPropertyという名前のインターフェイスを、発明するかもしれません://これは、Java実装(Scalaでプログラミング)

interface CharacterProperty { boolean hasProperty(char ch); }

ですこのインタフェースを使用すると、Javaにメソッドが存在すると公式化することができます。 は文字列とCharacterPropertyを取り、プロパティを満たす文字列に 文字があればtrueを返します。次のようにして、その後、 呼び出しが存在することができます:

//this is Java 
exists(name, new CharacterProperty() { 
    public boolean hasProperty(char ch) { 
     return Character.isUpperCase(ch); } 
}); 

が、私はこの場合には実行可能な取得することはできません。著者の言葉を解釈し、インタフェースを使ってこれをJava言語で実装する方法は?助けていただければ幸いです。

答えて

2

基本的には、Javaの8にあなたがほとんどのようにうまくスカーラのようにそれを行うことができます。Java 8の前に

name.chars().anyMatch(Character::isUpperCase)

、(ラムダとメソッド参照により導入された)メソッドの抽象化を行うための方法はありませんでした、そのため、単機能テスト用のラッパークラスを作成しなければならず、扱いにくく扱いにくいものでした。それで誰も本当にそれをしないという発言。コードは、おそらくこのように行くだろう

グッド
public boolean exists(String str, CharacterProperty prop) { 
    return str.chars().anyMatch(prop::hasProperty); 
} 
+0

Java8は、この質問のためのいくつかの他の回答があるかどうかを2014年に来たが、この本は、2011年に公開されていますか? –

関連する問題