在上一篇中写道 Java 泛型 -- 依据声明的变量类型自动推断,主要是说明了通过声明类型告知泛型方法具体类型,其后有个小结三种方式告知泛型类或泛型方法具体类型,在此重列如下:
一. 具体类型写在两尖括号中
1. List<String> list
2. new HashMap<String, String>
3. instance.<String>foo() //如方法 <T> T foo() { return (T) obj; }
二. 变量声明类型指示具体类型
1. List<String> list = new ArrayList<>() // 这个例子应该可以列在这里,List<String> 指示了具体类型是 String, 所以后只需要空 <>,JDK7 or later
2. String s = obj.foo() //比如方法是 <T> T foo() { return (T) obj; }, 由于前面的 String s 声明,所以不必写成 String s = instance.<String>foo()
三. 实参类型指示具体类型
1. instance.foo(String.class) //方法为 <T> T foo(Class<T> type) { return (T) obj; }, instance.foo(String.class) 返回的就是字符串值
2. instance.foo("abc") //方法为 <T> foo(T value) { return (T) obj; }, instance.foo("abc") 返回的就是字符串值
不知还有无其他的方式?
如果泛型类或泛型方法未获知具体类型,就会作为 Object 看待
比如针对方法
123 public <T> foo() {return (T) obj;}
如果没有任何具体类型信息的时候,即仅仅写成
instance.foo() 返回的就是一个 Object 类型
本文链接 https://yanbin.blog/three-ways-tell-generic-concrete-type/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。