Как я могу привести объект в список тип? - PullRequest
3 голосов
/ 17 марта 2020

У меня есть ситуация, когда я получаю объект в качестве возвращаемого типа, и он должен быть приведен к типу List<Object[]>. Это выглядит проще, чем кажется.

Прежде всего, когда я пытаюсь сделать следующее: Object[] objectArray = (Object[])object; я получаю предупреждение о том, что приведение (Object []) избыточно. С какой стати это было бы излишним? Объект, безусловно, должен быть чем-то отличным от массива объектов, верно? Ну, согласно Intellij, это тайно то же самое, и я был бы признателен, если бы кто-то мог объяснить мне, почему это так.

Из-за вышеописанного явления я тоже не могу сделать это:

Object[] objects = (Object[])callOutputs.getOutputParameterValue(entrySet.getValue());
List<Object[]> objectList = Arrays.asList(objects);

Несмотря на явное приведение возвращаемого типа к Object [], Arrays.asList() по-прежнему обрабатывает его как Object. Даже если тип переменной Object[].

Может кто-нибудь объяснить, как создать объект List<Object[]>?

РЕДАКТИРОВАТЬ: Вот объявление метода:

public abstract <T> T getOutputParameterValue(org.hibernate.procedure.ParameterRegistration<T> parameterRegistration)

1 Ответ

2 голосов
/ 17 марта 2020

Я предполагаю, что entrySet.getValue() возвращает ParameterRegistration<Object[]> (в противном случае произошла бы ошибка компилятора). В таком случае

Object[] objects = (Object[])callOutputs.getOutputParameterValue(entrySet.getValue());

приводит Object[] к Object[]. getOutputParameterValue() возвращает тип аргумента типа своего ввода (T in ParameterRegistration<T>), поэтому компилятор может проверить, что тип возвращаемого значения Object[], и вам не нужно явно приводить его.

Arrays.asList() - это отдельная история.

Arrays.asList(Object[]), как ожидается, вернет List<Object>, потому что объявлен метод, принимающий массив типа T, и возвращает List<T> .

Если вы хотите, чтобы он был List<Object[]>, вы можете принудительно установить его, добавив свидетель типа

List<Object[]> objectList = Arrays.<Object[]>asList(objects);

Это необходимо, только если у вас есть один аргумент (это не не нужно, если у вас есть что-то вроде Arrays.<Object[]>asList(objects, objects1, objects2))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...