在JRuby中使用的Java对象上使用(自定义)getId方法有什么问题吗?
我非常喜欢简洁的方法名称,所以当我们的代码库有如下内容时:在JRuby中使用的Java对象上使用(自定义)getId方法有什么问题吗?,java,jruby,Java,Jruby,我非常喜欢简洁的方法名称,所以当我们的代码库有如下内容时: Account.getAccountId(); 我想添加一个别名,这样我就可以: Account.getId(); 然而,我听说。。。我的公司其他地方抱怨这可能会有什么问题,因为我定义的getId会干扰所有Java对象都拥有的内置getId,或者类似的东西。我们还使用JRuby引用旧的Java类,因此这个问题可能也与内置的Ruby getId方法有关 不过,我并不完全相信有问题(我真的很喜欢我的简短方法名)。那么,是否有人知道在定义
Account.getAccountId();
我想添加一个别名,这样我就可以:
Account.getId();
然而,我听说。。。我的公司其他地方抱怨这可能会有什么问题,因为我定义的getId会干扰所有Java对象都拥有的内置getId,或者类似的东西。我们还使用JRuby引用旧的Java类,因此这个问题可能也与内置的Ruby getId方法有关
不过,我并不完全相信有问题(我真的很喜欢我的简短方法名)。那么,是否有人知道在定义getId方法时(在Java或JRuby中)是否存在问题,如果存在问题,它们是什么,可以解决吗
编辑:从到目前为止的回复(以及我对Java的了解)来看,问题不可能出在一些核心JavaGetID功能上(因为没有)。所以这个问题是针对JRuby用户的;如果getId“冲突”来自任何地方,那么它一定来自JRuby的东西。我倾向于可读性而不是简洁性。对我来说,getAccountId比getId更清晰
考虑到下面的两行,foo是一个account对象就更清楚了。(虽然我不会真的把对象称为foo)
编辑时,java类对象没有方法getId()。我不懂ruby,所以你必须依靠其他人让你知道这一点。我倾向于可读性而不是简洁性。对我来说,getAccountId比getId更清晰
考虑到下面的两行,foo是一个account对象就更清楚了。(虽然我不会真的把对象称为foo) 编辑时,java类对象没有方法getId()。我不认识鲁比,所以你得依靠别人让你知道 然而,我听说。。。我的公司其他地方抱怨这可能会有什么问题,因为我定义的getId会干扰所有Java对象都拥有的内置getId,或者类似的东西 是类层次结构的根。每个类都有
对象
作为超类。所有对象(包括数组)都实现此类的方法
但是Object
没有任何getId
方法。所有Java对象也是如此
然而,我听说。。。我的公司其他地方抱怨这可能会有什么问题,因为我定义的getId会干扰所有Java对象都拥有的内置getId,或者类似的东西
是类层次结构的根。每个类都有对象
作为超类。所有对象(包括数组)都实现此类的方法
但是
Object
没有任何getId
方法。所有Java对象也是如此。我看到的问题是,如果后来在对象上添加了与别名冲突的getId方法(或类似的方法名),则会破坏代码。当有人拥有一个对象时,添加一个新方法应该是一个非破坏性的更改(序列化除外),但事实上,他们会破坏您的代码,因为您使用了一些别名
所以问题不是它与为所有对象定义的getId冲突,而是它可能与稍后将添加到同一类的方法冲突。解决这一问题的一种方法可能是创建一个具有短方法名的包装类,以便委托是明确的和静态的,如果添加了方法名,可能会造成混乱,但它将更具可包含性。我会看到的问题是,对象上是否有getId方法(或类似的方法名)如果后来添加了与别名冲突的代码,则会破坏代码。当有人拥有一个对象时,添加一个新方法应该是一个非破坏性的更改(序列化除外),但事实上,他们会破坏您的代码,因为您使用了一些别名
所以问题不是它与为所有对象定义的getId冲突,而是它可能与稍后将添加到同一类的方法冲突。解决这个问题的一种方法可能是创建一个具有短方法名的包装类,以便委托是清晰的和静态的,如果添加了方法名,可能会造成混乱,但它会更具可包含性。(虽然我不会真正称为对象foo)“我认为这是关键:在实际情况下,你会说“myAccount.getAccountId”、“bobsAccount.getAccountId”等。如果有好的变量名,很明显变量是什么,如果知道变量是什么,那么“getAccountId”与“getAccountTotal”、“getAccountPhoneNumber”一样多余“,或获取任何其他信息。我想大多数人都会同意,用类名作为每个方法名的前缀有点蹩脚,那么为什么getId应该有所不同呢?如果您使用迭代器访问帐户集合呢?我同意在每个方法前面加上类名是不好的,但是getId()非常通用,如果你能更清楚地说明它引用了什么Accounter,它会读得更好。next().getId()对我来说似乎没问题:-)对我来说getId>getAccountId,所以如果我能摆脱它,我会的,但最终这是一种主观偏好,(虽然我不会真的称对象为foo)“我认为这是关键:在实际情况下,你会说“myAccount.getAccountId”、“bobsAccount.getAccountId”等等。如果你有好的变量名,很明显变量是什么,如果你知道变量是什么,那么就说“getAccountId”与“getAccountTotal”、“getAccountPhoneNumber”或getAccount任何其他内容一样冗余。我想大多数人都会同意,用类名作为每个方法名的前缀有点蹩脚,那么为什么getId应该有所不同呢?如果您使用迭代器访问帐户集合呢?我同意在每个方法前面加上类名是不好的,但getId()是不好的
foo.getId();
foo.getAccountId();