泛型不适用于返回类型
为什么 java 不允许以下泛型返回类型:
public <T extends Enum<T> & MyInterface> Class<T> getEnum() {
return MyEnum.class;
}
虽然以下方法确实有效:
public <T extends Enum<T> & MyInterface> Class<T> getEnum(Class<T> t) {
return t;
}
getEnum(MyEnum.class);
MyEnum
是一个实现接口 MyInterface
的枚举。
为什么我不允许返回 MyEnum.class
?
编辑:
我需要这个,因为函数 getEnum()
位于接口中。它可以定义如下:
@Override
public Class<MyEnum> getEnum() {
return MyEnum.class;
}
但是,接口方法的返回类型是什么,以允许既是枚举又实现 MyInterface 的类的任何 Class
对象?
How come java doesn't allow the following generic return type:
public <T extends Enum<T> & MyInterface> Class<T> getEnum() {
return MyEnum.class;
}
While the following does work:
public <T extends Enum<T> & MyInterface> Class<T> getEnum(Class<T> t) {
return t;
}
getEnum(MyEnum.class);
MyEnum
is an enumaration that implements the interface MyInterface
.
Why am I not allowed to return MyEnum.class
?
EDIT:
I need this because the function getEnum()
is in an interface. It could be defined as follows:
@Override
public Class<MyEnum> getEnum() {
return MyEnum.class;
}
But what would then then be the return type of the interface method to allow any Class
object of a class that is both an enum and implements MyInterface
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的方法由
T
参数化 - 这个想法是调用者 可以指定T
是什么 - 而不是方法实现。对第二个方法的调用有效,因为
T
被隐式指定(由调用者)为MyEnum
。Your method is parameterized by
T
- the idea is that the caller gets to specify whatT
is - not the method implementation.The call to the second method works because
T
is implicitly specified (by the caller) to beMyEnum
.我也找到了第二个问题的答案:
具有泛型类型的接口需要参数化:
然后实现该接口的类定义要使用的类型:
I've found the answer to my second question too:
The interface with the generic type needs to be parameterized:
Then the class implementing the interface defines which type to use: