跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 获取泛型 Class 问题
未分類
26 5 月 2020

获取泛型 Class 问题

获取泛型 Class 问题

資深大佬 : yuxianjiazu 57

public class A<T> {  }  public class B {      public static <T> get(Class<T> clazz) {      //...     }          public static void main(String[] args) {      System.out.println(get((A<String>).class)); // 1 错误写法     } } 

请问,不添加

class C extends A<String> {  } 

的情况下, 怎么实现 1 的效果(C#可以实现,Java 不知道怎么实现)

使用场景:A<t>里面的 T 可以是(D1, D2, … Dn),不想分别多写一个(C1, C2, … Cn)类
A<(D1, D2, … Dn)> 的 Class 是 B.get 的参数</t>

大佬有話說 (20)

  • 資深大佬 : Raymon111111

    直接 get 的时候传 A.class 行吗?

  • 主 資深大佬 : yuxianjiazu

    @Raymon111111 不行的哦,需要返回 A<T>。

  • 資深大佬 : lhx2008

    不能实现 1 的效果,A<t> 的话,用父类的泛型或者通配符泛型

  • 資深大佬 : winterbells

    我记得 Java 的泛型是编译时的,跑起来后就没 <T> 这个东西了
    kotlin 里有运行时的泛型,reified

  • 主 資深大佬 : yuxianjiazu

    “`
    public static <T> T get(Class<T> clazz)
    “`
    少写了返回值(。^▽^)

  • 資深大佬 : Raymon111111

    @yuxianjiazu get 完之后强转 A<T>

  • 資深大佬 : des

    @winterbells
    确实 java 的泛型是编译时的,拿出来的是 object
    C#是运行时的

  • 主 資深大佬 : yuxianjiazu

    @Raymon111111 这样肯定不行的。。。返回的值是根据传入的 Class 进行运算的

  • 資深大佬 : mxalbert1996

    关键词 type erasure。
    @winterbells Kotlin 的 reified 一样是编译时的,想想为什么它只支持 inline fun。

  • 主 資深大佬 : yuxianjiazu

    @mxalbert1996
    @des
    @winterbells
    @lhx2008
    @Raymon111111

    谢谢,了解了,还以为可以跟 C#一样。我还是把 D1, D2, … Dn 写出来吧(;´д`)ゞ

  • 資深大佬 : SoloCompany

    可以改一下方法签名

    public static <C, T> T get(Class<C> type, Class<T> genericType)

    get(A.class, String.class)

  • 資深大佬 : guyeu

    把参数的类型从 Class 改成 ParamizedType 即可。

  • 主 資深大佬 : yuxianjiazu

    @guyeu 是 ParameterizedType 吗,我看看哈。

  • 資深大佬 : guyeu

    @yuxianjiazu #13 啊是的,我拼错了。。。

  • 資深大佬 : Aresxue

    泛型擦除,编译器不保留泛型信息,只能自己强转

  • 資深大佬 : okhowang

    可以参考 jackson 的泛型逻辑,传进去一个匿名泛型类
    mapper.readValue(jsonString, new TypeReference<Data<String>>() {});

  • 資深大佬 : SoloCompany

    @okhowang 你这里的 data 和 string 都是编译期存在运行时没有的

  • 資深大佬 : yhvictor

    可以用 guava 的 typetoken

  • 主 資深大佬 : yuxianjiazu

    Java 的 ParameterizedTypeImpl.make 类似于 C#的 Type.MakeGenericType

  • 資深大佬 : 游客

    11111

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具