能否将非静态方法作为参数?向量运算通用方法实现疑问
解决方案
在Java里要实现这种“把类的非静态方法作为参数传递”的需求,得用函数式接口配合方法引用来完成,具体步骤如下:
1. 定义函数式接口
先写一个匹配你向量方法签名的函数式接口,它描述“接收两个vector对象,返回一个vector对象”的操作:
@FunctionalInterface interface VectorBinaryOperation { vector operate(vector a, vector b); }
@FunctionalInterface注解可选,但加上能明确这是函数式接口,确保接口内只有一个抽象方法。
2. 修改通用的answer方法
把第三个参数改成上面定义的接口类型,通过接口方法执行具体运算:
public static String answer(vector alpha, vector beta, VectorBinaryOperation operation) { return operation.operate(alpha, beta).vectortoString(); }
3. 调用时传入具体运算的方法引用
现在可以直接把vector类里的非静态方法作为参数传递,用类名::方法名的方法引用语法:
// 调用向量加法 vector a = new vector(); vector b = new vector(); String additionResult = answer(a, b, vector::additionVector); // 调用叉积 String crossResult = answer(a, b, vector::crossProduct); // 调用减法 String subResult = answer(a, b, vector::subtraction);
原理说明
你之前的写法行不通,是因为Java不支持直接把方法名当作变量传递。函数式接口相当于“方法的容器”,方法引用则是把你已有的vector方法“装进”这个容器,让answer方法能通过接口调用具体运算逻辑。
内容的提问来源于stack exchange,提问作者MA w
相关产品推荐
相关产品推荐

