加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何用Java编写泛型方法

发布时间:2020-12-15 19:34:06 所属栏目:百科 来源:网络整理
导读:如何用 Java编写泛型方法. 在C#中,我会这样做 public static T ResolveT() { return (T) new object(); } 什么是Java中的等价物? 解决方法 首先,你的C#示例是错误的;除非typeof(T)== typeof(object),否则它将抛出InvalidCastException.您可以通过添加 const
如何用 Java编写泛型方法.

在C#中,我会这样做

public static T Resolve<T>()
    {
        return (T) new object();
    }

什么是Java中的等价物?

解决方法

首先,你的C#示例是错误的;除非typeof(T)== typeof(object),否则它将抛出InvalidCastException.您可以通过添加 constraint来修复它:

public static T Resolve<T>() where T : new() {
    return new T();
}

现在,这将是Java中的等效语法(或者,至少,尽可能接近):

public static <T> T Resolve() {
    return (T) new T();
}

注意在声明中双重提及T:一个是T in< T>参数化方法,第二个是返回类型T.

不幸的是,上述内容在Java中不起作用.由于Java泛型的实现方式,有关T的运行时类型信息不可用,因此上面给出了编译时错误.现在,你可以像这样解决这个约束:

public static <T> T Resolve(Class<T> c) {
    return c.newInstance();
}

注意需要传入T.class.这被称为runtime type token.这是处理这种情况的惯用方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读