我喜欢用getter方法“猜测”属性名称。因此'getSomeAttribute'将转换为'someAttribute'。
通常我会做类似
的事情String attributeName = Character.toLowerCase(methodName.indexOf(3))
+ methodName.substring(4);
非常难看,对吗?我通常把它隐藏在一个方法中,但有人知道更好的解决方案吗?
答案 0 :(得分:13)
我认为您的解决方案很好。我认为有更简单的方法可以做到这一点。
答案 1 :(得分:4)
Commons Lang的uncapitalize方法会帮助你,但我不认为你的解决方案是如此粗糙。
答案 2 :(得分:3)
commons lang会这样做:
String attributeName = StringUtils.uncapitalize(methodName.substring(3));
我需要很多公共场所,但如果你不喜欢那个额外的罐子,你可以复制这个方法。正如你所看到的,他们就像你一样:
public static String uncapitalize(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return str;
}
return new StringBuffer(strLen)
.append(Character.toLowerCase(str.charAt(0)))
.append(str.substring(1))
.toString();
}
答案 3 :(得分:3)
BeanInfo info = Introspector.getBeanInfo(bean
.getClass(), Object.class);
for (PropertyDescriptor propertyDesc : info
.getPropertyDescriptors()) {
String name = propertyDesc.getName();
}
另见decapitalize。
答案 4 :(得分:2)
值得记住的是;
答案 5 :(得分:2)
给定字符缓冲区,您可以应用以下代码:
int i = 0;
for(char x : buffer) {
buffer[i] = Character.toLowerCase(x);
i++;
}
测试和功能:)
答案 6 :(得分:0)
对我来说很好看。是的,它看起来很冗长,但考虑一下你正在尝试做什么,以及另一个程序员在试图理解这段代码试图做什么时会想到的。如果有的话,我会通过添加您正在做的事情(从getter方法中猜测属性名称)作为评论来延长时间。