具体问题如下:
```java
class main{
public static void main(){
Set<String> set=new Set();
set.add("1");
set.add("1");
set.add("1") ;
System.out.print(b(set));
}
public static <T>String b(Set<T> s){
//这里写什么?
return //可以返回实际传入的T的class对象
}
}
网上好多给的这个方法
Type actualTypeArgument = ((ParameterizedType) s.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
但返回的是"Set<E>"中的E
你用的那串代码获取的是类定义中属性类型,实际的类型是在类变量定义的时候确定的,所以从类定义中是拿不到具体类型的。只能是获取Set
对象中的元素,直接判断元素类型。
Set<String> set = new HashSet<>();
set.add("sss");
System.out.println(set.toArray()[0].getClass().getName());
就是想获取到泛型类的class对象,而不是其元素,不只是final的String。所以要考虑子类问题