2009-09-03 13 views
2

Je me demandais si vous pouviez m'aider avec mon problème. Cela est probablement dû au fait que je ne connais pas les bons mots-clés à rechercher.Comment instancier (à l'intérieur d'une méthode) différentes classes implémentant la même interface?

Ce n'est pas ses devoirs, juste ... anonymisées

J'ai une interface et un groupe de classes de mise en œuvre:

interface Fruit 
Banana implements Fruit 
Apple implements Fruit 
.... 

J'ai une classe de services publics de fruits. En ceci est une méthode qui prend n'importe quelle sorte Fruit et le tranche. Comment puis-je déclarer que le groupe de fruits est du même type que le fruit que je donne à la méthode?

à savoir Comment puis-je automatiser:

Fruit[] a = new Apple[pieces]; 

si je lui donne un Apple?

.

modifier: clarification

Je vais avoir le code comme ceci:

Fruit a = new Apple(); 
Fruit b = new Banana(); 
Fruit[] slices1 = FruitUtil.slice(a, 3); //slices1 should be an Apple 
Fruit[] slices2 = FruitUtil.slice(b, 3); //slices2 should be a Banana 
Fruit newApple = FruitUtil.copy(a); //newApple should be an Apple 

Comment méthode puis-je écrire tranche (fruits f, tranche int) ou une copie (Fruit f) de telle sorte que je crée la même type de Fruit que ce que j'ai passé dans les arguments (sans avoir à surcharger la méthode pour chaque type, ou faire instance de contrôles)

+0

est pas « Fruit [] a = nouvel Apple [pièces]; " assez? Cela devrait déjà fonctionner. Ou je ne reçois pas votre question? –

+0

Ajout d'une clarification pour vous .. – masher

Répondre

6

Tout d'abord je suggère d'abandonner les tableaux de références. Utilisez List à la place. Ensuite, il est relativement simple:

public static <T extends Fruit> List<T> slice(T fruit, int pieces) 
1

Vous pouvez également utiliser la réflexion: Array.newInstance (f.getClass(), pièces)