Java 泛型扩展泛型传递类型的泛型
如果这个问题是重复的,请原谅,我只是不知道如何用谷歌搜索来给出答案 首先,我有一个名为Java 泛型扩展泛型传递类型的泛型,java,Java,如果这个问题是重复的,请原谅,我只是不知道如何用谷歌搜索来给出答案 首先,我有一个名为AsyncRoutine的抽象类,它是泛型的,并指定某种类型的Msg类型 接下来,我有一个抽象的AsyncMessageProvider,用于将Msg传递给AsyncRoutine 假设我创建了一个子类MyAsyncRoutine,它扩展了AsyncRoutine。我想创建一个支持此类的AsyncMessageProvider,因此我将对它进行子类化,MyAsyncMessageProvidermakingMy
AsyncRoutine
的抽象类,它是泛型的,并指定某种类型的Msg
类型
接下来,我有一个抽象的AsyncMessageProvider
,用于将Msg
传递给AsyncRoutine
假设我创建了一个子类MyAsyncRoutine
,它扩展了AsyncRoutine
。我想创建一个支持此类的AsyncMessageProvider
,因此我将对它进行子类化,MyAsyncMessageProvider
makingMyAsyncRoutine
它的泛型
在MyAsyncMessageProvider
中,我有一个方法,message(…)
,它被调用来传递Msg
,在本例中是一个整数
公共类MyAsyncMessageProvider扩展了AsyncMessageProvider{
受保护的无效消息(Msg){//编译错误,不知道“Msg”是什么
}
}
如何访问AsyncMessageProvider
中的MyAsyncRoutine
(Integer
)的泛型类型?我基本上希望将消息(…)
函数锁定到我在中指定的任何内容,因为我正在子类化AsyncMessageProvider
有没有可能不经思考就做到这一点?或者有没有更好的方法?如果可能的话,我希望避免使用反射
最小可行示例
抽象类定义:
公共抽象类异步例程{
//实施并不重要
}
公共抽象类AsyncMessageProvider{//编译错误,无法解析消息
抽象无效消息例程(Msg m);
}
- 如何在
AsyncMessageProvider
中使用Msg
,以便它与我使用子类AsyncMessageProvider
的“AsyncRoutine
”中的泛型Msg
”匹配
将其类型添加到子类中:
public abstract class AsyncMessageProvider<Msg, Routine extends AsyncRoutine<Msg>> {
abstract void messageRoutine(Msg m);
}
如果他们认为该方法需要名为Msg
的类的实例,则可以原谅
当您实际拥有一个名为Msg
的类时,问题会变得更糟,因为同名的类型会隐藏相应的类,这会让您的同事感到悲伤。公共类MyAsyncMessageProvider扩展了AsyncMessageProvider
解决了这个问题。不是吗?@Gendarme打败了我,但如果这不能解决问题,那么你大概只需要确保你的消息()
方法使用了类型为T
的参数,而不是其他硬编码类型的参数。@MichaelBerry@Gendarme我需要访问AsyncMessageProvider
中的AsyncRoutine
的泛型,以便为message()指定模板,在MyAsyncMessageProvider
中重写时,它将默认为我扩展的任何内容。我如何在AsyncMessageProvider
中定义它?@wdavies973您能发布一个帖子让我们仔细看看吗?也许是因为我的工作太累了,但我现在还没有完全明白。@MichaelBerry我编辑了这个问题,添加的内容是否让问题更清楚了?我完全理解,这个问题措辞不好。
public abstract class AsyncMessageProvider<T, Routine extends AsyncRoutine<T>> {
abstract void messageRoutine(T t);
}
abstract void messageRoutine(Msg m);