深入了解JavaBean规范中的属性名和setter/getter方法

JavaBean规范文档:http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/

关于属性名的部分:

Utility method to take a string and convert it to normal Java variable name capitalization. This normally means converting the first character from upper case to lower case, but in the (unusual) special case when there is more than one character and both the first and second characters are upper case, we leave it alone. Thus "FooBah" becomes "fooBah" and "X" becomes "x", but "URL" stays as "URL".

工具翻译+个人修改:

工具方法把一个字符串并将其转换为正常的Java变量名的大写。这通常意味着将第一个字符从大写转换为小写, 但在(特殊)的特殊情况下,当前两个字符或多个字符是大写时,我们不处理他(直接返回)。

因此,“Foobah”变成了“foobah”和“X”变成了“x”,但“URL”仍然是“URL”。

以上的内容实际上是java.bean.Introspector#decapitalize这个方法的javadoc注释。

方法如下:

<!-- lang: java -->
/**
 * Utility method to take a string and convert it to normal Java variable
 * name capitalization.  This normally means converting the first
 * character from upper case to lower case, but in the (unusual) special
 * case when there is more than one character and both the first and
 * second characters are upper case, we leave it alone.
 * <p>
 * Thus "FooBah" becomes "fooBah" and "X" becomes "x", but "URL" stays
 * as "URL".
 *
 * @param  name The string to be decapitalized.
 * @return  The decapitalized version of the string.
 */
public static String decapitalize(String name) {
    if (name == null || name.length() == 0) {
        return name;
    }
    if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
                    Character.isUpperCase(name.charAt(0))){
        return name;
    }
    char chars[] = name.toCharArray();
    chars[0] = Character.toLowerCase(chars[0]);
    return new String(chars);
}

我们使用这个方法对几种不同的字段名进行测试:

看下面的代码:

<!-- lang: java -->
public class TestBean {
    public static void main(String[] args) {
        System.out.println(Introspector.decapitalize("name"));
        System.out.println(Introspector.decapitalize("Name"));
        System.out.println(Introspector.decapitalize("mName"));
        System.out.println(Introspector.decapitalize("NAME"));
    }
}

输出:

name
name
mName
NAME

从结果来看nameName的结果是一样的,也就是说如果字段名是Name,会被当成name使用,因此从这个角度来说这种命名方式是错误的,不符合规范的。

mName是没问题问题的。NAME也没有问题,NAme,NAMe这样也不会有错。

这篇文章说深入可能还不够资格,并且标题中的setter和getter根本没提。如果有不明白的地方,欢迎留言!

转载于:https://my.oschina.net/flags/blog/326752

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值