Мне нужно выполнять алгоритмы на разных примитивных типах; алгоритм по существу тот же, за исключением того, какой тип переменных является. Так, например,
/**
* Determine if <code>value</code> is the bitwise OR of elements of <code>validValues</code> array.
* For instance, our valid choices are 0001, 0010, and 1000.
* We are given a value of 1001. This is valid because it can be made from
* ORing together 0001 and 1000.
* On the other hand, if we are given a value of 1111, this is invalid because
* you cannot turn on the second bit from left by ORing together those 3
* valid values.
*/
public static boolean isValid(long value, long[] validValues) {
for (long validOption : validValues) {
value &= ~validOption;
}
return value == 0;
}
public static boolean isValid(int value, int[] validValues) {
for (int validOption : validValues) {
value &= ~validOption;
}
return value == 0;
}
Как я могу избежать этого повторения? Я знаю, что нет возможности генерировать примитивные массивы, поэтому мои руки кажутся связанными. У меня есть экземпляры примитивных массивов, а не массивы в штучной упаковке, называемые объектами Number, поэтому я тоже не хочу идти по этому маршруту.
Я знаю, что есть много вопросов о примитивах в отношении массивов, autoboxing и т.д., но я не видел его сформулированным совершенно таким образом, и я не видел решающего ответа о том, как взаимодействовать с эти массивы.
Я полагаю, я мог бы сделать что-то вроде:
public static<E extends Number> boolean isValid(E value, List<E> numbers) {
long theValue = value.longValue();
for (Number validOption : numbers) {
theValue &= ~validOption.longValue();
}
return theValue == 0;
}
а затем
public static boolean isValid(long value, long[] validValues) {
return isValid(value, Arrays.asList(ArrayUtils.toObject(validValues)));
}
public static boolean isValid(int value, int[] validValues) {
return isValid(value, Arrays.asList(ArrayUtils.toObject(validValues)));
}
Это действительно намного лучше? Таким образом, будет создано намного больше объектов, чем исходная реализация, хотя она СУЩЕСТВУЕТ исходный код. Любые мысли в этом вопросе будут оценены.