简体   繁体   English

用Java中的抽象类扩展抽象泛型类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM