Java通用对象传递

时间:2010-10-09 20:43:16

标签: java generics inheritance google-cloud-datastore

我正在玩GAE(我正在使用Objectify)并希望制作类似通用方法的东西,但不确定如何做到(就我的理解而言,仿制药不会是一个解决方案为了我)。 这是我的设置:

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

我的目标是做这样的事情;

Key<TagCloud> parentKey=put(new TagCloud(null,...));
Key<LadyGaggaCloud> childKey=put(new LadyGaggaCloud(parentKey,...));

显然,这不起作用,因为Cloud想要一个通用的云键而不是TagCloud。我希望能够传递所有云类型的键,扩展云(键&lt; TagCloud&gt;,键&lt; FooCloud&gt;,键&lt; LadyGagaCloud&gt;等)。 我考虑过使用模板制作Cloud Class泛型,所以我可以做一些Key< T extends Cloud> parent并将扩展云(FooCloud)传递给它,但这不会令人满意,因为TagCloud可以有任何类型的云作为父母而不仅仅是一种类型。

有没有人知道如何做到这一点?或者我正在尝试做的关于GAE和NoSQL是一个愚蠢的想法,我应该在数据域中处理不同类型的云吗? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这可能会实现您所描述的内容:

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