2014-12-05 4 views
0

Я пытаюсь создать статический метод утилиты, который принимает один вход класса A, экземпляры которого получили свой собственный уникальный id, и получить значение boolean, описывающее, является ли определенный к ним относится характеристика. Нет описания для описания отношений; без формулы два варианта, которые возникли вначале, были static final int[], содержащие все истинные id s или строку «или» || тестов. Есть ли другие лучшие варианты там или какое-то особое преимущество для использования одного над другим? Задача - не большой подвиг, но я хочу, чтобы она была простой и удобочитаемой.Хранение массива заданных условий

Вот пример, чтобы помочь вам получить общее представление о том, что я имею в виду:

public class UtilitiesA { 

    // first method of retrieval- static storage array 
    private static int[] validIds = { 
     A.instanceM.id, A.instanceZ.id, A.instanceL.id, A.instanceF.id, A.instanceP.id 
    }; 

    public static boolean getHasCharacteristic(A input) { 
     for (int id : validIds) if (a.id == id) return true; 
     return false; 
    } 
    // vs the second method... 
    public static boolean getHasCharacteristic2(A input) { 
     return (input.id == A.instanceM.id || 
       input.id == A.instanceZ.id || 
       input.id == A.instanceL.id || 
       input.id == A.instanceF.id || 
       input.id == A.instanceP.id) 
    } 
} 

Второй более интуитивным я думаю, но и более повторы. Любые предложения будут высоко ценится.

ответ

0

Как насчет:

private static Integer[] validIds = { 
    A.instanceM.id, A.instanceZ.id, A.instanceL.id, A.instanceF.id, A.instanceP.id 
}; 

public static boolean getHasCharacteristic3(A input) { 
     return Arrays.asList(validIds).contains(input.id) 
    } 

если вы собираетесь называть это часто, вы можете просто хранить все идентификаторы в списке на первом месте вместо массива, так что у вас нет для преобразования массива в список, чтобы использовать метод contains List.

Обратите внимание, что если вы храните его в массиве, это должен быть массив целых чисел, а не int.

+0

Да, он будет работать примерно 0-10 раз за цикл с частотой 20 Гц, поэтому несколько раз. Тогда я могу сохранить данные как список. – vbee

+0

Ваш первый вариант одинаково важен, и я не знаю, что это будет работать лучше или хуже, за исключением того, что вы можете называть его одной строкой. –

+0

Мне нравится, насколько это лаконично ... может попытаться выяснить, что List.contains вызывает «под капотом». – vbee

0

Второй, даже если он выглядит простым, будет неудобно кодировать, если содержимое в ваших действительных идентификаторах больше. В этом случае для каждого значения внутри этого массива вам нужно будет проверить. Если количество содержимого больше, возможно, вы можете потерять те или иные значения. Поэтому рекомендуется выполнять итерацию с использованием цикла for, как и в первой реализации.

Смежные вопросы