java - 这两个通用函数有什么区别?
问题描述
正如标题所说,我想知道这些功能之间的区别是什么。为什么我应该/不应该<T>
在 foo2 中提供
public class Base<T> {
public T[] foo(int i){
/*Do something*/
}
public <T> T[] foo2(int i){
/*Do something*/
}
}
解决方案
你的T
第二个函数隐藏了T
你的类的类型参数。这意味着T
在第二个函数中引用了不同的类型T
。这种命名是混乱的,应该避免。
当然,如果您确实想引用不同的泛型类型,您可以这样做,但您应该以不同的方式命名类型参数。以下示例与您的示例等效,但不隐藏T
定义于Base
:
public class Base<T> {
public T[] foo(int i){
/*Do something*/
}
public <S> S[] foo2(int i){
/*Do something*/
}
}
推荐阅读
- javascript - Javascript OOP - 抽象(例如询问)、封装(将属性/方法组合在一起或保持状态私有?)、多态性
- r - R_使用apply函数时提取正在使用的元素的行列
- android-studio - Xamarin Android - 更改 Android 设备中的 DisplaySize 设置
- javascript - 反应状态数组索引不可能
- c++ - 将`boost::tuple`转换为`boost::fusion::tuple`
- php - PHP如何将\n转换为换行符
- c# - Visual Studio,无法保存到 USB 闪存驱动器
- .net - Powershell 4 中重载的方法解析错误
- swift - 我可以在我的 swift 服务器上获取我所有的 fireBase 用户 ID 吗?
- php - WP 按名称查询帖子