Необработанный тип - это имя общего класса или интерфейса без аргументов типа. Например, с учетом общего класса Box:
public class Box {
public void set(T t) { /* ... */ }
// ...
}
Чтобы создать параметризованный тип Box
, вы указываете фактический аргумент типа для параметра формального типа T
:
Box intBox = new Box<>();
Если аргумент фактического типа опущен, вы создаете необработанный тип Box
:
Box rawBox = new Box();
. Поэтому Box
является необработанным типом родового типа Box
. Однако не общий тип или тип интерфейса не является сырым типом.
Необработанные типы отображаются в устаревшем коде, потому что многие классы API (например, классы Collections) не были типичными до JDK 5.0. При использовании сырых типов вы, по существу, получаете поведение перед генериками - Box
дает вам Object
s. Для обратной совместимости допускается присвоение параметризованного типа его необработанному типу:
Box stringBox = new Box<>();
Box rawBox = stringBox; // OK
Но если вы назначаете сырой тип параметризованному типу, вы получите предупреждение:
Box rawBox = new Box(); // rawBox is a raw type of Box
Box intBox = rawBox; // warning: unchecked conversion
Вы также получаете предупреждение, если используете необработанный тип для вызова общих методов, определенных в соответствующем родовом типе:
Box stringBox = new Box<>();
Box rawBox = stringBox;
rawBox.set(8); // warning: unchecked invocation to set(T)
Предупреждение показывает, что необработанные типы обходят общие проверки типа, откладывая улов небезопасных код для выполнения. Поэтому вам следует избегать использования необработанных типов.
В разделе «Тип стирания» содержится дополнительная информация о том, как компилятор Java использует необработанные типы.
As упомянутый ранее, при смешивании устаревшего кода с общим кодом вы можете столкнуться с предупреждающими сообщениями, подобными следующим:
Примечание: Example.java использует непроверенные или небезопасные операции.
Примечание. : Перекомпиляция с -Xlint: не проверяется для деталей.
blockquote>Это может произойти при использовании более старого API, который работает с необработанными типами, как показано в следующем примере:
public class WarningDemo { public static void main(String[] args){ Box
bi; bi = createBox(); } static Box createBox(){ return new Box(); } } Термин «непроверенный» означает, что компилятор не имеет достаточной информации о типе для выполнения всех проверок типа, необходимых для обеспечения безопасности типа. Предупреждение «unchecked» по умолчанию отключено, хотя компилятор дает подсказку. Чтобы просмотреть все «непроверенные» предупреждения, перекомпилируйте с помощью -Xlint: unchecked.
Повторная компиляция предыдущего примера с -Xlint: unchecked показывает следующую дополнительную информацию:
WarningDemo.java:4: warning: [unchecked] unchecked conversion found : Box required: Box
bi = createBox(); ^ 1 warning Чтобы полностью отключить unchecked warnings, используйте флаг -Xlint: -unchecked. Аннотации
@SuppressWarnings("unchecked")
подавляют непроверенные предупреждения. Если вы не знакомы с синтаксисом@SuppressWarnings
, см. Аннотации.Исходный источник: Учебники по Java
Из того, что я могу сказать, тег <img>
по умолчанию является единственным inline-block
. Чтобы быть в безопасности, я бы порекомендовал класс, вы никогда не знаете, когда меняются все элементы определенного типа, чтобы укусить вас. Или вы всегда можете создать свой собственный тег и назначить ему display:inline-block;
. Таким образом, вы не меняете стандартные функции стандартных элементов ...
EDIT
Также появляется button
, textarea
, input
и select
inline-block
Источники:
В соответствии с этим img
есть inline-block
http://dev.w3.org/html5/markup/ img.html # img-display
И здесь утверждается, что button
, textarea
и т. д. также: http://www.w3.org/TR /CSS2/sample.html
EDIT # 2
Хотя источник выше утверждает, что img
теги inline-block
кажется (благодаря Alohci), что они являются только inline
http://jsfiddle.net/AQ2yp/
В Firefox были протестированы следующие:
button
есть inline-block
: http://jsfiddle.net/GLS4P/
textarea
is inline
: http://jsfiddle.net/235vc/
input
is inline
: http://jsfiddle.net/RFKe8/
select
is inline-block
: http://jsfiddle.net/5B4Gs/
Есть ли тот, который по умолчанию имеет значение
blockquote>inline-block
?Строго говоря, нет. Спецификации HTML W3 никогда не указывают значения свойств CSS по умолчанию для всех элементов any . Они предоставляют «таблицу стилей по умолчанию» для HTML 4, но разработчикам только рекомендуется использовать ее - это не требование или какой-либо мандат. Спецификации HTML 5 указывают на «типичные свойства отображения по умолчанию», но, опять же, они не требуются (также имейте в виду, что HTML 5 все равно работает рабочий проект ).
So который оставляет все значения по умолчанию до браузера и как разработчики на самом деле чувствуют элементы, должны отображаться пользователю. Никто не может гарантировать, что определенный элемент будет отображаться как
inline-block
или любым другим способом в чьем-то браузере. Вы должны всегда явно устанавливать это, если хотите, чтобы это произошло. Не полагайтесь на «defaults».Если нет, какое специальное имя тега было бы подходящим для применения «встроенного блока» с помощью CSS? Или я должен придерживаться класса?
blockquote>Это зависит от вас и от того, как вы разрабатываете свои страницы. Вы всегда должны использовать элементы, которые семантически соответствуют содержимому, содержащемуся в них. Если элемент всегда будет использоваться в контексте, который потребует отображения
inline-block
, обязательно установите его в таблицу стилей. В противном случае вам придется прибегать к классам или более конкретным селекторам, чтобы ваши элементы отображались правильно.
Вы можете проверить мой codepen со всеми HTML-элементами и свойством display
по умолчанию. Некоторые теги синтаксически нарушены, но это не имеет значения для нашей цели.
В настоящее время в FF есть [5]:
<button>
<select>
<meter>
<progress>
<marquee>
И еще 2 (включая 5 выше) в Chrome:
textarea
input
ДА есть элемент, который по умолчанию имеет встроенный.
Ответ - это элемент span.
<span>
button
, textarea
, input
и select
по умолчанию inline-block
.
Если вы хотите inline-block
a div
, вы должны дать это имя класса.
.inline-block {
display: inline-block
}
Затем ...
<div class="inline-block"></div>
КОРРЕКЦИЯ
Я ошибся в img
. Кажется, он по умолчанию inline
, а не inline-block
В принципе, браузер зависит от того, какое значение по умолчанию для свойства display
для каждого элемента. Даже черновики HTML5 не предписывают, какие значения должны использоваться, хотя он представляет «ожидаемый рендеринг» элементов с точки зрения CSS.
Согласно таблице стилей по умолчанию для HTML в CSS 2.1, элементы, которые по умолчанию имеют display: inline-block
, - button
, input
, select
и textarea
. Браузеры используют такие настройки, за исключением того, что в Firefox это относится только к button
и select
.
В разделе Rendering HTML5 CR, meter
и progress
дополнительно описывается как наличие встроенного блока как «ожидаемого рендеринга», и браузеры, которые реализовали эти элементы, по-видимому, ведут себя таким образом. Элемент keygen
также описывается как встроенный блок, но Firefox этого не делает (он реализовал keygen
внутренне как select
в DOM); IE не поддерживает keygen
вообще; Chrome реализует его, как было предложено.
Поскольку все эти элементы имеют довольно специализированные значения, функциональность и рендеринг idiosyncracies, ни один из них не является адекватным для общего использования в качестве элемента, который является встроенным блоком по умолчанию и может иметь различные значения. То, что вы можете использовать для такого элемента, обычно span
или div
, в зависимости от того, предпочитаете ли вы встроенный или блок как рендеринг по умолчанию.
Вот скрипт, который получает стандартное отображаемое значение для большинства тэгов HTML.
В chrome встроенный блок по умолчанию элементами являются: "INPUT", "BUTTON", "TEXTAREA", "SELECT"
button
и select
. IE 11 имеет все 4 как inline-block
– Dryden Long
7 February 2014 в 00:30
Это не настоящий ответ на вопрос прямо сейчас, но с достаточной поддержкой он может когда-нибудь быть.
<seg>
short для «сегмента». Как и в, сегменты линии.
с полиполнением:
<style> seg { display: inline-block; } </style>
Было бы неплохо, если бы был официальный, но нет, так что вот best (IMO) предложил название для такого элемента, о котором я знаю.
inline
– Dryden Long 7 February 2014 в 00:18