我正在使用lamdbas,所以我可以根据我可以从三个不同对象检索的值一致地设置ModelObject的属性.代码的工作原理如下:
public class Processor { private void bar(Setter setter, MyClass myObject) { String variable = myObject.getStringByABunchOfMethods(); setter.setVariable(variable); } protected void foo(...) { ... bar(value -> model.setA(CONSTANT, value), aObject); bar(value -> model.setB(value), bObject); bar(value -> model.setC(value), cObject); ... } private interface Setter { public void setVariable(String string); } } public interface IModel { public void setA(String arg0, String arg1); public void setB(String arg0); public void setC(String arg0); }
我已阅读在这里,有可能改写bar(value -> model.setB(value), bObject);
到bar(model::setB, bObject)
.我认为这看起来更好,更简洁,但我还没有找到一种方法将setA
方法重写为double :: notation.任何人都可以告诉我这是否可能,如果可以的话:这怎么可能?
来自https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html和https://www.codementor.io/eh3rrera/tutorials/using-java-8-method-reference-du10866vx
将有4种不同的方法参考.相应的lambda和方法参考:
(args) - > Class.staticMethod(args),Class :: staticMethod
(obj,args) - > obj.instanceMethod(args),ObjectType :: instanceMethod
(args) - > obj.instanceMethod(args),obj :: instanceMethod
(args) - > new ClassName(args),ClassName :: new
lambda 值 - > model.setA(CONSTANT,value)与上面的任何lambdas都不对应,因此无法将其重写为方法引用.