У меня есть следующий код:Как я могу уменьшить несколько методов, которые принимают 1 параметр разного типа?
public final boolean doesExistById(Long id) {
return dataAccessObject.findById(id) != null;
}
public final boolean doesExistByName(String name) {
return dataAccessObject.findByName(name) != null;
}
public final boolean doesExistByDisplayName(String displayName) {
return dataAccessObject.findByDisplayName(displayName) != null;
}
public final boolean doesExistByWebId(String webId) {
return dataAccessObject.findByWebId(webId) != null;
}
Мой Product
класс имеет свойства id, name, displayName, wedId
.
dataAccessObject.findBy____()
возвращает объект типа Product
, если его можно найти в хранилище данных, или null
, если он не может.
Я хотел бы уменьшить этот кусок кода, если это возможно, потому что у меня есть много объектов, для которых требуется шаблон doesExist()
, как указано выше. Клиентский код будет знать только одно из этих свойств.
Возможное решение, я думал бы, чтобы это сделать:
public final boolean doesExist(Long id, String name, String displayName, String webId) {..}
, а затем вызвать его с null
неизвестных полей при использовании if
заявления, чтобы определить, какое поле имеет значение. Но есть ли другой способ, который более изящный?
Я думаю, что у вас уже есть хорошо и выглядит чистейшим. –
Я не думаю, что вы можете сделать это лучше. Даже отражение не сделало бы это проще. – EpicPandaForce
Что вы пытаетесь сэкономить, объединив методы в одном? 'isExist (null, name, null, null)' намного хуже, чем 'doesExistByName (name)', и поскольку вы должны указать как значение, так и атрибут (т.е. 'id',' name', 'displayName' и т. д.), вы можете также вставить атрибут в имя метода. – dasblinkenlight