Java Кастинги Массивы - PullRequest
       3

Java Кастинги Массивы

0 голосов
/ 16 декабря 2010

Я написал простую библиотеку, в которой пользователь расширяет один из моих абстрактных классов, а затем передает этот класс одной из моих функций.

//user class
class My_robot extends Robot{
}

//My library function
function Robot_maker("path.to.My_robot")

Затем функция создания робота создает массив типа Robot[].После этого пользователь может вернуть массив, вызвав другую из моих функций Robot[] get_robot_army()

Я знаю, что могу привести элемент массива Robot[] к элементу, но есть ли способ приведениявесь массив сразу?(Я хочу абстрагироваться от конечного пользователя)

Есть ли способ использовать Reflection для изменения типа возвращаемого значения функции?

///////////////////////////// Существует некоторая потребность в ясности /////////////////////////////
Рассматриваемый код - это функция batch_result () в строке 124
Я хочу иметь возможность вернуть класс, предоставленный пользователем, с использованием функции batch_set_relationship () в строке 139
В качестве примера, если кто-то выполнил здесь в строке 88 , как я могу передать пользователю массив предоставленного пользовательского предоставленного класса.

Также может кто-нибудь прояснить, почему приведение ксбой массива другого типа.

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Отвечая на комментарии выше:

Я бы просто вернул массив Robot [] и произвел приведение каждого элемента этого массива.

Как я уже говорил, приведите к чему ? И почему ? Тип возвращаемого значения пользовательской функции должен быть Robot []. Пользовательские подклассы Robot делают то, что им нужно, и возвращают Robot [], содержащий экземпляры своего подкласса. Ваш код не должен знать, что подкласс; вот и вся точка полиморфизма.

0 голосов
/ 16 декабря 2010

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

Таким образом, вы можете получить приведение типа возврата.

С помощью класса отражения вы не можете изменить тип класса, но вы можете произвольно получить тип класса динамически, а затем вам потребуется изменить тип класса, чтобы он соответствовал вашим требованиям

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