2017-01-17 27 views
1

我在ABC类,其定义大致如下传递函数为参考,以另一种方法在Java中

Boolean getBool(Value val1, Value val2) { 
    if (val1.getVal() == val2.getVal()) { 
    return true; 
    } 
    return false; 
} 

我如何可以通过这个方法,参照其他方法的功能,比方说工作()和从那里调用它。

String operate(<<<Pass getBool method here>>>, Param1) { 
    val1 = some computations on Param1 
    val2 = some other computations on Param2 
    Boolean value = <<<<<Call getBool with val1 and val2 here>>>>> 
    if (value) { return "Yes"; } 
    else { return "No"; } 
} 

请帮忙!! 我已经阅读了几个解决方案,但他们要么通过引用传递一个方法参数,但无效返回类型,或者,通过引用传递一个方法没有任何参数和一些返回类型。 我想通过参数传递一个函数,并有一些返回类型。

+0

'布尔值= getBool(VAL1,val2的);'? – nbokmans

+0

你可以使用'BiPredicate '类型。这里是一个列表:https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html或者,你可以定义你自己的功能界面。 –

+0

简单的方法就是将调用包装到lambda表达式中,然后传递lambda表达式。 Java有一个'::'iirc,可以用来获取对方法的引用。 – Carcigenicate

回答

2

您的方法可以用Java 8功能接口BiFunction<T, U, R>表示,因为它接受两个参数并返回一个值。

String operate(BiFunction<Value,Value,Boolean> function, TypeOfParam1 param1, TypeOfParam2 param2) { 
    val1 = some computations on param1 
    val2 = some other computations on param2 
    Boolean value = function.apply(val1,val2); 
    return value ? "Yes" : "No"; 
} 

并调用operate与方法参考:

ABC abcInstance = ... 
String boolString = operate (abcInstance::getBool, param1, param2); 
+0

谢谢!这有助于:) – Sumit

1

使用双功能类:

public class Test { 

private static Boolean getBool(int val1, int val2) { 
    if (val1 == val2) { 
     return true; 
    } 
    return false; 
} 

private static String operate(BiFunction<Integer, Integer, Boolean> fun, int param1, int param2) { 
    int val1 = param1; 
    int val2 = param2; 
    Boolean value = fun.apply(val1, val2); 
    if (value) { 
     return "Yes"; 
    } else { 
     return "No"; 
    } 
} 

public static void main(String[] args) { 
    operate(TestStaticReference::getBool, 1, 2); 
    } 

} 
相关问题