【发布时间】:2020-08-11 15:30:06
【问题描述】:
我正在尝试编写一个库函数(f),它在其实现中使用另一个权重函数(w)。 我希望有一个默认的权重函数(dw)在使用中,同时也允许库函数(f)的用户提供他们自己的权重函数(w)。
我为具有计算功能的权重函数制作了一个接口。但是,因为我不知道这样的函数需要什么参数,所以我这样定义它:
public interface WeightFunction {
double calculate(Object ... arguments);
}
但是,当我用我的默认函数(dw)覆盖它时,我做了一件丑陋的事情:
@Override
public double calculate(Object ... arguments) {
return calculate((Pixel)arguments[0], (Pixel)arguments[1]);
}
public double calculate(Pixel u, Pixel v){
//logic here
return 0;
}
有没有更优雅的方法来做到这一点?这算不算好的形式?
【问题讨论】:
-
如果
argument[0]或argument[1]不是instanceof Pixel的对象,此代码将在运行时抛出ClassCastException。这是故意的吗? -
如果使用默认权重函数,是的。 Pixel 是一个接口,所以如果它们不是
implements Pixel的对象,它应该抛出一个类异常 -
„...我正在尝试编写一个使用另一个权重函数(w)的库函数(f)...“ - 一个粗略的草图 你所说的“
function(f)使用function(w)”会很有帮助。请分享你的function(f)的伪代码 - 或其他东西? TIA。
标签: java generics interface variadic-functions