2017-01-14 10 views
0

У меня есть класс А и класс В, где класс B требует только 5 из 10 свойств от А.Cast Object [] к другому типу

Так что у меня есть что-то подобное,

A[] objArray = populateResponse();

И чтобы бросить его в B, я сделать что-то вроде

for (A : objArray){ // getters here and push it to B obj array manually }

Любые другие предложения, чтобы сделать это в лучшую сторону, так как А есть человек y поля и размер массива могут увеличиться?

Заранее благодарен!

+1

Число свойств A не имеет значения. Копирование 5 полей из объекта, который имеет 10 полей, принимает то же время, что и копирование 5 полей объекта, который имеет 50 полей. Длина массива также не имеет значения: если вам нужно сделать эту копию, независимо от того, как вы ее делаете, это нужно сделать. Я думаю, вы ищете решение несуществующей проблемы. –

+1

Кроме того, это не имеет никакого отношения к актерскому составу. –

+0

@JB Спасибо за ваше мнение. было любопытно узнать, можно ли что-то сделать. –

ответ

1

Если B расширяет или реализует A, просто отбросьте.

В противном случае - вы не можете этого сделать. Вы получите ClassCastException.

Если два класса не связаны, и вы все еще хотите это сделать, вы должны сделать их связанными. Создайте интерфейс, который они будут реализовывать и передавать ссылки на этот интерфейс. Тем не менее, это все равно не позволит вам отбрасывать от A до B.

Если вас беспокоит слишком много экземпляров A, вы можете преобразовать их в B. Напишите функцию, которая принимает экземпляр A и создает экземпляр B из него и потеряет экземпляр A.

+0

Это было хорошо. попробовал его с интерфейсами, и это привело к исключению. не могли бы вы рассказать свое мнение о продлении A в B? –

+0

Вы не сможете использовать A-B с интерфейсами, я просто предложил вам использовать интерфейсы, если это имеет для вас больше смысла. – zmbq