jdk8 参数为方法_JDK 8中的几乎命名的方法参数

jdk8 参数为方法

有时在Java中命名方法参数确实很不错,这看起来可能已经很长时间了,但是始终还有其他一些解决方法,例如使用构建器模式来获得类似的行为,这将为一点点。 在我看来,使用JDK 8中的Lambda支持可以使您获得非常接近的效果,而无需其他一些方法所需要的模板。

因此,请考虑这个简单的Facade类,该类提供了带有可变参数列表的方法。 请注意,该方法带有一个Consumer对象,这是我们稍后将要使用Lambda调用的方法。

package client;

import java.util.function.Consumer;

public class Facade {

    public static void invoke(Consumer<Parameter> op) {

        Parameter p = new Parameter();
        op.accept(new Parameter());
        invoke(p);        
    }

    public static void invoke(Parameter p) {

        // Defensive copy and validate
        p = p.clone();
        p.validate();

        // ...
    }

    public static class Parameter implements Cloneable {
        public String value1, value2, value3;

        public Parameter validate() {
            // ...

            return this;
        }

        public Parameter clone() {
            // We can use vanilla clone here, for more complicated mutable objects
            // you might need to perform a deeper copy
            try {
                return (Parameter) super.clone();
            } catch (CloneNotSupportedException e) {
                throw new RuntimeException(e);
            }
        }
    }

}

因此,一旦有了这些,就可以使用Lambda表示法调用具有您认为合适的参数数量的invoke方法:

...
{

    public static void main(String[] args) {

        // Single parameter version
        Facade.invoke(p ->  p.value1="x" );
        // Multiple parameter version
        Facade.invoke(p -> { p.value1="x"; p.value2="y";});
    }
}

当然,您的鹰眼将意识到,使用早期的JDK,相同的模式,当然减去了Consumer方法。 考虑到那里有大量的Java开发人员,可能已经有人发明了这种模式。 但您永远不知道,如果不写下来,就不会发生。

...
{

    public static void main(String[] args) {

        // Using an anonymous inner class pre JDK 8
        Facade.invoke(new Parameter() {{
            value1 = "x";
            value2 = "y";
        }});
    }
}


翻译自: https://www.javacodegeeks.com/2013/08/almost-named-method-arguments-in-jdk-8.html

jdk8 参数为方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值