Что-то не так с наличием (пользовательского) метода getId для объекта Java, используемого в JRuby? - PullRequest
1 голос
/ 22 октября 2009

Я большой поклонник кратких имен методов, поэтому, когда наша кодовая база имеет что-то вроде:

Account.getAccountId();

Мне нравится добавлять псевдоним, чтобы я мог просто сделать:

Account.getId();

Однако я слышал ... бормотание из других мест в моей компании о том, как это может быть проблематично, потому что определяемый мной getId будет мешать встроенному getId, который есть у всех объектов Java, или что-то в этом роде. Также мы используем JRuby для ссылки на наши старые классы Java, поэтому проблема может быть связана со встроенным методом Ruby getId.

Тем не менее, я не совсем уверен, что есть проблема (и мне действительно нравятся мои короткие имена методов). Итак, кто-нибудь знает, существуют ли проблемы с определением методов getId (в Java или JRuby), и если да, то каковы они и можно ли их обойти?

РЕДАКТИРОВАТЬ: Из ответов, полученных до сих пор (и того, что я уже знал о Java), видно, что проблема не может быть связана с некоторыми основными функциями Java getId (так как их нет). Так что на самом деле этот вопрос для людей JRuby; если "конфликт" getId происходит откуда угодно, то это должно быть из материала JRuby.

Ответы [ 3 ]

1 голос
/ 22 октября 2009

Однако я слышал ... бормотание из других мест в моей компании о том, как это может быть проблематично, потому что определяемый мной getId будет мешать встроенному getId, который есть во всех объектах Java, или что-то в этом роде.

java.lang.Object является корнем иерархии классов. Каждый класс имеет Object как суперкласс. Все объекты, включая массивы, реализуют методы этого класса.

Но Object не имеет getId метода. И так же все объекты Java.

0 голосов
/ 22 октября 2009

Проблема, которую я вижу, состоит в том, что если позже к объекту будет добавлен метод getId (или аналогичное имя метода), который конфликтует с вашим псевдонимом, это нарушит код. Когда у кого-то есть объект, добавление нового метода должно быть непрерывным изменением (за исключением сериализации), но на самом деле они будут нарушать ваш код из-за некоторого псевдонима, который вы сделали.

Таким образом, проблема не в том, что он конфликтует с getId, который определен для всех объектов, а в том, что он может конфликтовать с методом, который позже будет добавлен в тот же класс. Одним из способов решения этой проблемы может быть создание класса-обертки с короткими именами методов, чтобы делегирование было четким и статичным, и если имя метода добавлено, это может создать путаницу, но это будет более сдерживаемым.

0 голосов
/ 22 октября 2009

Я предпочитаю удобочитаемость, а не краткость. Для меня getAccountId понятнее, чем getId

Учитывая 2 строки ниже, гораздо понятнее, что foo является объектом учетной записи. (хотя я бы не стал называть объект foo)

foo.getId();
foo.getAccountId();

edit, у Java-класса Object нет метода getId (). Я не знаю рубина, поэтому вам придется полагаться на других, чтобы вы знали об этом.

...