Что такое необработанный тип и почему я часто слышу, что они не должны использоваться в новом коде?
«Необработанный тип» - это использование общего класс без указания аргумента (ов) типа для его параметризованного типа (ов), например используя List
вместо List<String>
. Когда дженерики были введены в Java, несколько классов были обновлены для использования дженериков. Использование этого класса в качестве «необработанного типа» (без указания аргумента типа) позволило сохранить прежний код.
«Необработанные типы» используются для обратной совместимости. Их использование в новом коде не рекомендуется, потому что использование универсального класса с аргументом типа допускает более сильную типизацию, что, в свою очередь, может улучшить понятность кода и привести к появлению потенциальных проблем раньше.
Что такое альтернатива, если мы не можем использовать необработанные типы и как это лучше?
. Предпочтительной альтернативой является использование общих классов, как предполагалось, - с подходящим аргументом типа (например, List<String>
). Это позволяет программисту более конкретно указывать типы, придавая будущим сопровождающим больше смысла предполагаемое использование переменной или структуры данных и позволяет компилятору обеспечивать лучшую безопасность типов. Эти преимущества вместе могут улучшить качество кода и помочь предотвратить появление некоторых ошибок кодирования.
Например, для метода, в котором программист хочет, чтобы переменная List, называемая «имена», содержит только строки:
List<String> names = new ArrayList<String>();
names.add("John"); // OK
names.add(new Integer(1)); // compile error
Обычно вы можете использовать -?
. В качестве альтернативы вы можете использовать -{0,1}
, но вы должны обнаружить, что ?
для «нуля или одного вхождения» поддерживается почти везде.
pax> echo 19740103-0379 | egrep '19740103\-?0379'
19740103-0379
pax> echo 197401030379 | egrep '19740103\-?0379'
197401030379
Если вы хотите принять 12 цифр с любым номером вы можете сделать что-то вроде:
-*([0-9]-*){12}
, которое в основном равно нулю или более дефисов, за которыми следуют 12 вхождений (цифра с последующим нулем или более тире) и будет захватывать все такие как:
--3-53453---34-4534---
(конечно, вы должны использовать \d
вместо [0-9]
, если ваш механизм регулярных выражений поддерживает это).
Вы можете попробовать разные:
\d*
соответствует строке, состоящей только из цифр
\d*-\d*
, соответствует строке цифр формата - тире - цифры
[0-9\-]*
соответствует строке, состоящей только из тире и цифр
. Вы можете объединить их через |
(или), так что у вас есть, например, (\d*)|(\d*-\d*)
: соответствует форматам только цифры и цифры -dash-цифры.
-
в класс символов ([...]
). Черточка не имеет особого значения в другом месте в регулярном выражении. – Richard 20 August 2010 в 08:34