2017-01-04 3 views
1

私はBiFunctionを使って関数を送信しています。BiFunction <> with Enum

public class Animal { 
    public static String cat(
     final String field, 
     final Object value 
    ) { 
     return "(CAT:" + field + toString(value) + ")"; 
    } 

    public static String dog(
     final String field, 
     final Object value 
    ) { 
     return "(DOG:" + field + toString(value) + ")"; 
    } 
} 

public String getAnimal(
    final String animalFieldName, 
    final BiFunction<String, Object, String> function, 
    final Object animelieldValue 
) { 
    return function.apply(animalFieldName, animalFieldValue); 
} 

と私はこのようにそれを使用します:

私が今持っていることである私が欲しいのはBiFunction <>が列挙型、 ので、署名のだろうということです

new Animal("catName", Animal::cat, "catti") 

getAnimal()は次のようになります。

String getAnimal(
    final String animalFieldName, 
    /* Enum that has values that are BiFunctions, */ 
    final Object animalFieldValue 
) 

私はコードの例をいただければ幸いです。

答えて

3

あなたは何を望んでいるのかはっきりしていませんが、これは法案に合っているようですか?

enum Animal implements BiFunction<String, Object, String> { 
    CAT, 
    DOG, 
    BEAR { 
     @Override 
     public String apply(String s, Object o) { 
      return "This is a Bear!!!"; 
     } 
    }; 

    @Override 
    public String apply(String s, Object o) { 
     return "(" + name() + ":" + s + o.toString() + ")"; 
    } 
} 

public void test() { 
    for (Animal animal : Animal.values()) { 
     System.out.println(animal.apply("hello", "Hello")); 
    } 
} 
2

@ OldCurmudgeonの答えのバリアント、よりラムダと:

enum Animal implements BiFunction<String, Object, String> { 
    CAT, 
    DOG, 
    BEAR((s, o) -> "This is a Bear!!!"); 

    private final BiFunction<String, Object, String> function; 

    private Animal(final BiFunction<String, Object, String> function) { 
     this.function = function; 
    } 

    private Animal() { 
     super((s, o) -> "(" + name() + ":" + s + o.toString() + ")"); 
    } 
} 

public void test() { 
    Animal 
     .values() 
     .stream(animal -> animal.apply("hello", "Hello")) 
     .forEach(System.out::println) 
    ; 
} 
+1

非常にエレガント! +1 – OldCurmudgeon

関連する問題