您能否使用类似于java中python的关键字args的概念来最小化访问器方法的数量?

vsaztqbk  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(314)

我最近了解到,在Python3中,为了尽量减少类的访问器方法的数量,您可以使用字典来基本上只有一组访问器方法,如下所示:

def __init__(self,**kwargs):
    self.properties = kwargs

def get_properties(self):
    return self.properties

def get_property(self, key):
    return self.properties.get(key, None)

这看起来非常有用,我想在java中应用类似的东西。我一直在研究可能具有多个属性的应用程序,创建和跟踪所有访问器方法可能是一件痛苦的事情。有没有类似的策略可以用于java?

jbose2ul

jbose2ul1#

不,java中没有kwargs。相反,您可以通过使用javavarargs将它们保存为java属性来实现与函数类似的功能。
你可以这样做:

useKwargs("param1=value1","param2=value2");

示例代码:

public void useKwargs(String... parameters) {

        Properties properties = new Properties();

        for (String param : parameters) {
            String[] pair = parseKeyValue(param);

            if (pair != null) {
                properties.setProperty(pair[0], pair[1]);
            }

        }

        doSomething(properties);
    }

    public void doSomething(Properties properties) {
        /**
         * Do something using using parameters specified in the properties
         */

    }

    private static String[] parseKeyValue(String token) {
        if (token == null || token.equals("")) {
            return null;
        }

        token = token.trim();

        int index = token.indexOf("=");

        if (index == -1) {
            return new String[] { token.trim(), "" };
        } else {
            return new String[] { token.substring(0, index).trim(),
                    token.substring(index + 1).trim() };
        }

    }
qzlgjiam

qzlgjiam2#

我不确定这是否对你有帮助,但我还是会尽力回答的。我先做一个类变量。然后我会用一本字典做一本课堂字典lists:variables. 然后让函数以字典为参数。

fslejnso

fslejnso3#

如果它适合并且最适合的话就使用这个模式,但是它确实应该是java规则的一个例外——它可能不合适。
java中的最佳实践是对每个变量使用getter和setter方法。是的,这是更多的代码-所以-如果你的懒惰让你的ide自动生成它们。它在那里有很好的理由。很多好的理由。有些是;
提升私有变量
定义到其他类的外部接口,允许类控制设置或获取变量的内容和方式
通过建立处理对象变量的标准方法来促进良好的编码实践
将此模式移植到这里会遇到的问题是由于键入。python是动态类型的,java是静态类型的。因此,为了在java中使用相同的模式,您必须将值存储在类似字符串/对象数组的东西中,然后将它们作为对象或字符串返回。那你以后就得把它们改过来。如果你的“属性”都是字符串,那就没关系了。规则也有例外,但是你需要知道所有的规则才能很好地打破它们。如果它们是不同的类型(string、int、customobject等),请不要使用python中使用的相同模式。

相关问题