Я разрабатываю рамки кластеров и у меня есть следующий интерфейс для того, чтобы обеспечить возможность выполнения фрагмента кода на другой узел в кластере:Удобно ли использовать java.lang.Void для классов, которые ничего не возвращают?
interface Operation<V> {
V run();
int getService();
}
Однако пользователь может не заботиться о результат операции. В этом случае я должен предоставить удобный для них способ. У меня есть два варианта:
я могу сказать им, чтобы использовать java.lang.Void в качестве параметра и проверить тип возвращаемого значения в удаленном сервере и возвращает результат, если общий тип не Пустота:
new Operation<Void> {
public Void run() {
//
return null;
}
public int getService() { return 1; }
}
Однако , даже если они используют java.lang.Void, им все равно нужно что-то вернуть в методе запуска, поэтому это может быть не лучший способ сделать что-то подобное.
Также я могу создать другой интерфейс, который ничего не возвращает. Однако теперь у нас есть два типа, и я боюсь, что это может быть много для сложного, чем первый способ.
interface FireAndForgetOperation {
void run();
int getService();
}
Какой путь вы считаете более удобным?
Я думаю, что это основано на мнениях, но два интерфейса примерно в два раза больше, чем один, и принуждение реализатора к явному возврату 'Void' действительно не кажется таким обременительным. –
Если бы я был вами, я бы пошел с Java8 «Необязательный» тип –
. Затем пользователям нужно вернуть Optional.empty(), right @kocko? – Boyolame