这是我在Stackoverflow上的第一个问题,所以如果我做错了什么,请告诉我,以便下一次改进。对自己的类型使用带有通配符的通用类型
由于我已经用Java编写了一些程序,甚至只是一些简单的东西,我仍然在学习很多关于功能的知识,并且发现阅读本网站的讨论很有帮助。
我以为我了解泛型的工作方式,直到遇到以下问题。我知道这不是最好的设计,或者有办法以另一种方式来解决它,但是让我们说它必须这样做。
(其目的是作为应用程序中的低层,所以我喜欢泛型以与在上面的层的连接。)
现状
甲基类Identifieable
由Groupable
延伸,一类
class Group<T extends Groupable> extends Groupable
{
public Group(Id id)
{
super(id);
content = new HashMap<T, Integer>();
}
private final HashMap<T, Integer> content;
// Additional methods for adding, removing etc.
}
:可以通过
Item
,
Mutation
,
Location
等
作为基团必须由这些东西,我添加扩展
我加入通用这里来限制能够限制一组项目,突变等一组必须是可分组了。
正如我希望能够知道我是哪个组部分我设计Groupable
如下:
class Groupable extends Identifieable
{
public Groupable(Id id)
{
super(id);
partOf = new ArrayList<Group<? extends Groupable>>();
}
private ArrayList<Group<? extends Groupable>> partOf;
private final ArrayList<Group<? extends Groupable>> containingGroups()
{
return partOf;
}
}
问题
泛型类型的“partOf”是什么让我痛苦。我需要返回其延伸可分组(当然),并间接SUPERS此对象的类是实例的类型的组的列表。突变当然不能成为物品清单的一部分。
我曾考虑在Groupable中使用类型参数,但这对我来说似乎并不正确。 您实例,从而有它的类作为一个类型,它的母公司,这是可能的,但不是很好的项目的方式。这样可以返回并存储它自己类型的组,但不能超级类型的组。
最后
我不知道这是明确的,我真的不知道该如何与保存的所有元素简化问题。
如果存在一个出色的解决问题的设计,记住所有这些类都被扩展并用作“通用”;)方式可能,非常感谢。
我读过关于使用原始类型,但这似乎并不正确,虽然已经安全地假设没有不良铸造会发生。如果有人可以用通配符解释Java用这种通用嵌套进行的操作以及解决这个特定问题的正确方法,再次非常感谢。
我比正确的方式或理论解释更感兴趣,而不是解决方法,没有错误,因为我不知道如何实现它。
相关:[?有没有一种方法来指代当前类型与类型变量(http://stackoverflow.com/questions/ 7354740/IS-有-A-方式对参考到的电流型与A型变量)。在你的情况下,我不会推荐我在那里解释的解决方案,而是试图将跟踪其他组的跟踪责任分开。我在这里看到我的答案与这种方法有关:http://stackoverflow.com/a/17076406/697449 –