[英]Extend abstract generic class with abstract class in Java
I have a base abstract class public abstract class BaseModel <T extends BaseModel<T>>
. 我有一个基本抽象类
public abstract class BaseModel <T extends BaseModel<T>>
。 Normally, I extend this class with something like public class OtherModel extends BaseModel<OtherModel>
. 通常,我用
public class OtherModel extends BaseModel<OtherModel>
。 For some of my classes, I want to have an intermediate abstract class, such that A extends B extends BaseModel. 对于某些类,我希望有一个中间的抽象类,以便A扩展B扩展BaseModel。
I'd like to be able to declare public class EndModel extends MiddleModel<EndModel>
. 我希望能够声明
public class EndModel extends MiddleModel<EndModel>
。 The only way I've managed to get Eclipse to be happy is if I declare MiddleModel
as public abstract class MiddleModel<T extends BaseModel<T>> extends BaseModel<T>
, but this seems ugly, and now I have to add a type anywhere I declare a variable as MiddleModel
, even if I don't actually care what type it is. 我设法让Eclipse满意的唯一方法是,如果我将
MiddleModel
声明为public abstract class MiddleModel<T extends BaseModel<T>> extends BaseModel<T>
,但这似乎很丑陋,现在我必须添加一个类型在任何将变量声明为MiddleModel
,即使我实际上并不在乎它是什么类型。 Is there a better way to do this? 有一个更好的方法吗?
If you want to add more functionality in MiddleModel , which depends on the generic type of it, declare it like this: 如果要在MiddleModel中添加更多功能,这取决于它的泛型类型,请这样声明:
public abstract class BaseModel <T extends BaseModel<T>> {}
public abstract class MiddleModel <T extends MiddleModel<T>> extends BaseModel<T> {}
public class EndModel extends MiddleModel<EndModel> {}
Note that EndModel doesn't support that extensibility. 请注意, EndModel不支持该可扩展性。 It's a trade-off, because I don't want to write
new EndModel<EndModel>()
but rather new EndModel()
. 这是一个折衷,因为我不想编写
new EndModel<EndModel>()
而是编写new EndModel()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.