我一直在研究lambda表达式以及如何在java 8中将方法作为参数传递,但我不确定它是否可能在我的情况下:
我有多个具有类似方法的类,但方法名在某些类中有所不同。每个方法都使用Long作为表示ID的参数。 所以,我试图做出:
void setScore(List<Long> nodes, method){
for (Long id : nodes)
System.out.println( method(id) );
}
}
这是我想传递的方法的两个例子,但我有:
Double DegreeScorer<Long>.getVertexScore(Long id)
Double BetweennessCentrality<Long, Long>.getVertexRankScore(Long id)
我以为我找到了使用LongConsumer接口的解决方案,但LongConsumer没有返回任何值,因此我无法存储结果。
非常感谢任何帮助。
更新 我最终得到了:
<T> void setScore(List<Long> nodes, LongFunction<T> getScore){
for (Long id : nodes)
System.out.println(getScore.apply(id));
}
}
setScore(nodes, ranker::setVertexScore);
答案 0 :(得分:4)
如果您的所有方法都返回Double
,请使用java.util.Function<Long,Double>
:
void setScore(List<Long> nodes, Function<Long,Double> fn) {
for (Long id : nodes)
System.out.println(fn.apply(id));
}
}
如果您有不同的返回类型,请添加泛型类型参数
<T> void setScore(List<Long> nodes, Function<Long,T> fn) {
for (Long id : nodes)
System.out.println(fn.apply(id));
}
}