2010-10-09 11 views
-1

Je joue autour de GAE (J'utilise Objectify) et je voulais faire quelque chose comme une méthode générique, mais je ne sais pas comment le faire (et pour autant que je sache, les génériques ne le seraient pas t être une solution pour moi). Voici ma configuration:Java Generic Object Passing

public abstract class Cloud{ 
    Key<Cloud> parent; 
    public Cloud(Key<Cloud> parent,...){ 
     .... 
    } 
} 
public class TagCloud extends Cloud{ 
    public TagCloud(Key<Cloud> parent,...){ 
     super(parent,...); 
     .... 
    } 
} 

Mon but est de faire quelque chose comme ça; De toute évidence, cela ne fonctionne pas, car Cloud veut une clé générique Cloud et non TagCloud. Je veux pouvoir passer toutes les Clés des Types de Nuages, qui étendent le Cloud (Clé < TagCloud>, Clé < FooCloud>, Clé < LadyGagaCloud>, etc.). Je pensais rendre le Cloud Class générique avec templating, donc je pourrais faire quelque chose d'un Key< T extends Cloud> parent et lui passer le Cloud (FooCloud), mais cela ne satisferait pas, car un TagCloud peut avoir n'importe quel type de Cloud comme parent et pas seulement un seul type.

Est-ce que quelqu'un a une idée de comment accomplir cela? Ou est ce que j'essaie de faire à propos de GAE et NoSQL une idée stupide et devrais-je gérer les différents types de nuages ​​dans un champ de données? Nous vous remercions de votre aide!

+0

Où la méthode 'mettre()' vient? –

+0

Sûrement, faire votre fonction prend 'Key 'devrait fonctionner? (De même, votre champ 'parent' doit également être de ce type.) –

+0

- put() provient de objecti et renvoie une clé du type d'objet transmis à la méthode. - Je vais vérifier l'idée générique non liée. Je reviendrai! Thnx – japrescott

Répondre

0

Cela peut accomplir ce que vous décrivez:

public abstract class Cloud{ 
    Key<? extends Cloud> parent; 
    public Cloud(Key<? extends Cloud> parent,...){ 
     .... 
    } 
}