Unchecked Generics при вызове lineChart.getData.addAll () [duplicate]

Проще, лучше:

img {
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            margin: auto auto;
            position: absolute;
}

Затем вам нужно вставить свой тег img в тег, который имеет спортивную позицию: относительное свойство, следующим образом:

<div style="width:256px; height: 256px; position:relative;">
      <img src="photo.jpg"/>
</div>
71
задан skiwi 15 January 2014 в 10:46
поделиться

3 ответа

Как упоминалось выше janoh.janoh, varargs в Java - это просто синтаксический сахар для массивов плюс неявное создание массива на вызывающем сайте. Таким образом,

List<List<String>> combinations =
    Utils.createCombinations(cocNumbers, vatNumbers, ibans);

на самом деле

List<List<String>> combinations =
    Utils.createCombinations(new List<String>[]{cocNumbers, vatNumbers, ibans});

Но, как вы знаете, new List<String>[] не разрешено в Java по причинам, которые были освещены во многих других вопросах, но в основном связаны с тем, что массивы знают свой тип компонента во время выполнения и проверяют во время выполнения, добавляются ли элементы в соответствие с его типом компонента, но эта проверка невозможна для параметризованных типов.

Во всяком случае, вместо отказа , компилятор все еще создает массив. Он делает что-то похожее на это:

List<List<String>> combinations =
    Utils.createCombinations((List<String>[])new List<?>[]{cocNumbers, vatNumbers, ibans});

Это потенциально опасно, но не обязательно небезопасно. Большинство методов varargs просто перебирают элементы varargs и читают их. В этом случае он не заботится о типе времени выполнения массива. Это относится к вашему методу. Поскольку вы находитесь на Java 7, вы должны добавить аннотацию @SafeVarargs к вашему методу, и вы больше не получите это предупреждение. В этой аннотации в основном говорится, что этот метод заботится только о типах элементов, а не о типе массива.

Однако существуют некоторые методы varargs, которые используют тип среды выполнения массива. В этом случае это потенциально опасно. Вот почему предупреждение есть.

115
ответ дан newacct 22 August 2018 в 12:49
поделиться
  • 1
    Спасибо, что не только упомянул SafeVarags, но и рассказал нам, когда мы сможем его использовать. – KitsuneYMG 28 October 2014 в 16:46
  • 2
    Если это не было сразу очевидно для кого-либо (как это было не для меня), Javadocs for @SafeVarargs имеет пример метода, который небезопасен docs.oracle.com/javase/7/docs/api /java/lang/SafeVarargs.html – michiakig 28 May 2015 в 14:46
  • 3
    Таким образом, @SafeVarargs может использоваться, когда ваш метод потребляет только , элементы массива и не (и никогда не будут) создавать элементы для размещения в массиве? Особая осторожность должна быть предпринята, если вы назначаете аргумент массива полю, к которому могут быть применены другие методы, поскольку определение того, что на нем не выполняются небезопасные операции, может быть не тривиальным. – neXus 10 November 2017 в 15:29

Поскольку java-компилятор использует неявное создание массива для varargs, а java не позволяет создавать общий массив (поскольку аргумент типа не может быть повторно идентифицирован).

Правильный код (эти операции разрешены с массивами), поэтому необходимо непроверенное предупреждение:

public static <T> List<List<T>> createCombinations(List<T> ... lists) {
    ((Object[]) lists)[0] = new ArrayList<Integer>();
    // place your code here
}

См. подробное объяснение здесь

12
ответ дан Blauharley 22 August 2018 в 12:49
поделиться

Как насчет подавления предупреждения?

@SuppressWarnings("unchecked")
0
ответ дан V. Kalyuzhnyu 22 August 2018 в 12:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: