当前位置:  开发笔记 > 编程语言 > 正文

带有两个参数的方法的双冒号赋值

如何解决《带有两个参数的方法的双冒号赋值》经验,为你挑选了1个好方法。

我正在使用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.任何人都可以告诉我这是否可能,如果可以的话:这怎么可能?



1> toongeorges..:

来自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都不对应,因此无法将其重写为方法引用.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有