我从教程中找到了这段代码,我猜测该方法的getUriBase返回类型是String,但不清楚<T extends IEntity>该方法中正在发挥什么作用以及为什么将其放在开头?
public interface IUriMapper {
<T extends IEntity> String getUriBase(final Class<T> clazz);
}
Run Code Online (Sandbox Code Playgroud)
这是创建泛型方法的约定。
泛型方法的语法包括类型参数、尖括号内并出现在方法的返回类型之前。对于静态泛型方法,类型参数部分必须出现在方法的返回类型之前。
如果您在返回类型之前看到String您定义了类型参数T。现在,<T extends IEntity>基本上您正在创建一个有界类型参数,其中您告诉编译器它T应该只是 的子类IEntity。
需要注意的重要一点是,您需要<T extends IEntity>在方法之前定义(这就是您所说的“通用方法”,更多信息即将到来...),因为您的接口不是通用类型,假设您的接口如下所示,那么您需要不要定义T类型参数,因为编译器会知道什么是T类型参数。
public interface IUriMapper<T extends IEntity> {
String getUriBase(final Class<T> clazz);
}
Run Code Online (Sandbox Code Playgroud)
因此,当您想要定义自己的类型时,基本上泛型方法很有用(或者换句话说,适用于某些情况)。考虑下面的示例,其中您的泛型类型(您的接口“IUriMapper”)定义了类型参数“T”,但对于getUriBase您正在创建新类型“E”的方法
public interface IUriMapper<T extends IEntity> {
<E extends Number> String getUriBase(final Class<E> clazz);
}
Run Code Online (Sandbox Code Playgroud)
此 Oracle 文档是学习泛型的最佳来源。
| 归档时间: |
|
| 查看次数: |
4723 次 |
| 最近记录: |