2016-04-16 10 views
4

私は非常に同じに見える2つの方法があります:(a、b)関数をメソッドに渡して使用するにはどうすればよいですか?

public Book minus(BigDecimal parameterA, BigDecimal parameterB, BigDecimal parameterC) { 
    return new Book(
     this.a.subtract(parameterA), 
     this.b.subtract(parameterB), 
     this.c.subtract(parameterC) 
    ); 
} 

public Book plus(BigDecimal parameterA, BigDecimal parameterB, BigDecimal parameterC) { 
    return new Book(
     this.a.add(parameterA), 
     this.b.add(parameterB), 
     this.c.add(parameterC) 
    ); 
} 

私はグループに希望引数として関数を受け取り、単一のヘルパーメソッドにこれら:

private Book apply(Function function, BigDecimal parameterA, BigDecimal parameterB, BigDecimal parameterC); 

a、b &cはBigDecimalクラスのフィールドです。

このような方法をどのように渡すことができますか?

私は、Java 8

は、2つの入力またはBinaryOperatorを取るようあなたが、またはこのケースでBiFunctionを機能を使用することができます

public Book minus(BigDecimal parameterA, BigDecimal parameterB, BigDecimal parameterC) { 
    return apply(BigDecimal::subtract, parameterA, parameterB, parameterC); 
} 

public Book minus(BigDecimal parameterA, BigDecimal parameterB, BigDecimal parameterC) { 
    return apply(BigDecimal::add, parameterA, parameterB, parameterC); 
} 

private Book apply(BinaryOperator<BigDecimal> operator, BigDecimal parameterA, BigDecimal parameterB, BigDecimal parameterC) { 
    return new Book(
     operator.apply(a, parameterA), 
     operator.apply(b, parameterB), 
     operator.apply(c, parameterC) 
    ); 
} 
+0

'this.a'の種類は何でそれを呼び出すことができますか?これは 'minus'や' plus'メソッドを持たないため、BigDecimalではありません。 – Tunaki

答えて

8

を解決していただきありがとうございます実行しています@HankDが示唆するように。

private Book apply(BinaryOperator<BigDecimal> function, 
        BigDecimal parameterA, 
        BigDecimal parameterB, 
        BigDecimal parameterC); 

あなたは

Book b1 = apply(BigDecimal::add, a, b, c); 
Book b2 = apply(BigDecimal::subtract, a, b, c); 
+4

'BigDecimal.plus(BigDecimal)'は存在しません。 – Tunaki

+3

あなたは 'BigDecimal :: add'を意味しましたか? – Andrew

+0

@ uncaki良い点、ありがとうございます。 –

関連する問題