Jai*_*ain 8 python java dictionary accessor keyword-argument
我最近了解到,在Python 3中,为了最小化类的访问器方法的数量,您可以使用词典基本上只有一组访问器方法,如下所示:
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)
Run Code Online (Sandbox Code Playgroud)
这似乎非常有用,我想在Java中应用类似的东西.我一直在研究可能具有多个属性的应用程序,创建和跟踪所有访问器方法可能很痛苦.是否有类似的策略我可以用于Java?
小智 7
不,Java 中没有 kwargs。相反,您可以通过使用 java varargs将它们保存为 java 属性来类似于您的函数。
你可以这样做:
useKwargs("param1=value1","param2=value2");
Run Code Online (Sandbox Code Playgroud)
示例代码:
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() };
}
}
Run Code Online (Sandbox Code Playgroud)
如果该模式适合并且最适合,请使用该模式,但它确实应该是 Java 中规则的一个例外 - 它可能不合适。
Java 的最佳实践是对每个变量使用 getter 和 setter 方法。是的,代码更多 - 那又怎样 - 如果你懒得让 IDE 自动生成它们。它的存在是有充分理由的。有很多很好的理由。有些是;
通过移植此模式,您将遇到的问题是由于键入造成的。Python 是动态类型的,而 Java 是静态类型的。因此,为了在 Java 中使用相同的模式,您必须将值存储在字符串/对象数组之类的内容中,然后将它们作为对象或字符串返回。那么您稍后必须转换它们。也许如果你的“属性”都是字符串那就没问题了。规则也有例外,但您需要了解所有规则才能很好地打破它们。如果它们是不同的类型(String、int、CustomObject 等),请不要使用与 Python 中使用的相同模式。
| 归档时间: |
|
| 查看次数: |
3917 次 |
| 最近记录: |