Что такое необработанный тип и почему я часто слышу, что они не должны использоваться в новом коде?
«Необработанный тип» - это использование общего класс без указания аргумента (ов) типа для его параметризованного типа (ов), например используя List
вместо List<String>
. Когда дженерики были введены в Java, несколько классов были обновлены для использования дженериков. Использование этого класса в качестве «необработанного типа» (без указания аргумента типа) позволило сохранить прежний код.
«Необработанные типы» используются для обратной совместимости. Их использование в новом коде не рекомендуется, потому что использование универсального класса с аргументом типа допускает более сильную типизацию, что, в свою очередь, может улучшить понятность кода и привести к появлению потенциальных проблем раньше.
Что такое альтернатива, если мы не можем использовать необработанные типы и как это лучше?
. Предпочтительной альтернативой является использование общих классов, как предполагалось, - с подходящим аргументом типа (например, List<String>
). Это позволяет программисту более конкретно указывать типы, придавая будущим сопровождающим больше смысла предполагаемое использование переменной или структуры данных и позволяет компилятору обеспечивать лучшую безопасность типов. Эти преимущества вместе могут улучшить качество кода и помочь предотвратить появление некоторых ошибок кодирования.
Например, для метода, в котором программист хочет, чтобы переменная List, называемая «имена», содержит только строки:
List<String> names = new ArrayList<String>();
names.add("John"); // OK
names.add(new Integer(1)); // compile error
Я предлагаю, чтобы это было правильное поведение. Коды состояния 302 и 307 указывают, что ресурс можно найти в другом месте. #bookmark
- это место в ресурсе.
Как только ресурс (html-документ) был найден, браузер должен найти #bookmark
в документе.
Аналогия такова: вы хотите посмотреть что-то вверх в книге в главе 57, поэтому вы идете в библиотеку, чтобы получить книгу. Но на полке есть заметка о том, что книга двинулась, теперь она находится в другом здании. Итак, вы идете в новое место. Вам все еще нужна глава 57 - это не имеет значения, когда вы получили книгу.
Это аспект, который не был охвачен предыдущими спецификациями HTTP, но был рассмотрен в более поздней HTTP-разработке :
Если сервер возвращает код ответа 300 («множественный выбор»), 301 («постоянно перемещается»), 302 («перемещается временно») или 303 («см. Другие»), и если сервер также возвращает один или несколько URI, где ресурс может быть найден, клиент ДОЛЖЕН обрабатывать новые URI, как если бы в конце был добавлен идентификатор фрагмента исходного URI.
Исключением является то, что возвращенный URI уже имеет идентификатор фрагмента. В этом случае идентификатор исходного фрагмента НЕ ДОЛЖЕН быть добавлен к нему.
blockquote>Таким образом, фрагмент исходного URI должен также использоваться для URI перенаправления, если он также не содержит фрагмент.
Хотя это был всего лишь проект, срок действия которого истек в 2000 году, кажется, что поведение, описанное выше, является де-факто стандартным поведением среди современных веб-браузеров.
@Julian Reschke или @Mark Nottingham , вероятно, знают об этом больше / лучше.
Из того, что я нашел, не ясно, каково должно быть точное поведение. Есть много людей, имеющих проблемы с этим, некоторые из них хотят сохранить закладку через перенаправление, некоторые из них хотят избавиться от нее.
Различные браузеры обрабатывают это по-другому, поэтому на практике это не полезно полагаться на любое поведение.
Это определенно проблема с браузером. Браузер никогда не отправляет часть закладки URL-адреса на сервер, поэтому сервер ничего не может сделать, чтобы узнать, есть ли закладка или нет, и ничего, что можно было бы сделать с ней надежно.
Location
. Что-то вродеhttp://www.yahoo.com#
– Holger Just 12 March 2011 в 16:49