2017-01-14 2 views
0

J'ai la classe A et classe B, où la classe B ne nécessite que 5 10 propriétés de A.Cast Object [] à un autre type

j'ai donc quelque chose comme,

A[] objArray = populateResponse();

Et de le jeter dans B, je fais quelque chose comme

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

Toutes les autres suggestions à faire d'une meilleure façon puisque a a l'homme y les champs et la taille du tableau peuvent-ils grandir?

Merci d'avance!

+1

Le nombre de propriétés de A est sans importance. La copie de 5 champs d'un objet comportant 10 champs prend le même temps que la copie de 5 champs d'un objet comportant 50 champs. La longueur du tableau est également hors de propos: si vous avez besoin de faire cette copie, quelle que soit la façon dont vous le faites, cela doit être fait. Je pense que vous cherchez une solution à un problème inexistant. –

+1

En outre, cela n'a rien à voir avec un casting. –

+0

@JB Merci pour votre opinion. était curieux de savoir si quelque chose pouvait être fait. –

Répondre

1

Si B étend ou implémente A, jetez-le.

Sinon, vous ne pouvez pas faire cela. Vous obtiendrez un ClassCastException.

Si les deux classes ne sont pas liées et que vous voulez toujours faire cela, vous devriez les mettre en relation. Créez une interface qu'ils implémenteront et transmettront des références à cette interface. Cela ne vous permettra toujours pas de lancer A à B, cependant.

Si vous êtes préoccupé par un trop grand nombre d'instances de A, vous pouvez les convertir en B. Écrivez une fonction qui prend une instance de A et en crée une instance de B, et perdez l'instance A.

+0

C'était une bonne prise. essayé avec des interfaces et il en résulte une exception. Pourriez-vous élaborer votre opinion sur l'extension de A dans B? –

+0

Vous ne serez pas en mesure de cas A à B avec des interfaces, je viens de vous suggérer d'utiliser des interfaces si cela a plus de sens pour vous. – zmbq