看到一个接口里的其中一个方法是这么写的:
T <T> findValue ();
前面一个 T 和后面的一个 T 分别代表着什么意思?问别人告诉我是类型根据调用时决定,并且返回值也是这个类型。是这样吗?感觉有点晕乎。厉害之处好像是解决了大量函数重载的问题?
菜鸟一枚,先谢过为敬。
|      1hteen      2017-01-12 20:59:41 +08:00 via iPhone swift 中有个泛类型,应该是一个意思 | 
|  |      2Arcus      2017-01-12 21:06:55 +08:00 泛型? | 
|  |      3misaka19000      2017-01-12 21:10:12 +08:00 第一个:返回对象的类型; 第二个:泛型 | 
|  |      4plqws      2017-01-12 21:33:53 +08:00 int a string b a = findValue() 时, findValue 里面就能用 T 获取 a 的类型 int b = findValue() 时, findValue 里面就能用 T 获取 b 的类型 string 好久没碰了,不知道有没有记错。。 | 
|  |      5SoloCompany      2017-01-12 23:11:48 +08:00 没见过这样的写法 一般是 <T> T method(T input); 也就是说模板参数必须在前面而不是后面,顺序反了 其次,一般应该有输入参数和模板参数对应,否则这个方法只能永远返回 null 了,因为方法体里面没法进行类型推断。当然 kotlin 的 reified 关键字可以有这种支持但那不是 java | 
|  |      6Rice      2017-01-13 01:25:01 +08:00 via iPhone 泛型啊 | 
|  |      7spice630      2017-01-13 01:46:49 +08:00 灾难。。期待 golang 的解决方案~~ | 
|      8Cbdy      2017-01-13 07:48:12 +08:00 via Android 这是 Java 的泛型吧?因为是编译时泛型,所以有点反直觉,啰嗦。 C++的模板 /C#泛型,就好理解很多。但不管怎么说,泛型是个好东西。 | 
|  |      9twoyuan      2017-01-13 08:27:25 +08:00 在这个例子貌似只能如题主所说,通过类型推导免去强制类型转换。 如果这个接口方法通过动态代理实现来调用的话,是可以通过获取返回值类型拿到这个 T 的 type 然后做处理的, Android 里 retrofit 就是这么实现的。 不过 T 和 <T> 写反了 | 
|  |      10Cabana      2017-01-13 08:30:09 +08:00 via Android 泛型方法 |