如何用Java编写泛型方法.
在C#中,我会这样做
public static T Resolve<T>()
{
return (T) new object();
}
Run Code Online (Sandbox Code Playgroud)
什么是Java中的等价物?
jas*_*son 11
首先,你的C#示例是错误的; 它将抛出一个InvalidCastException除非typeof(T) == typeof(object).您可以通过添加约束来修复它:
public static T Resolve<T>() where T : new() {
return new T();
}
Run Code Online (Sandbox Code Playgroud)
现在,这将是Java中的等效语法(或者,至少,尽可能接近):
public static <T> T Resolve() {
return (T) new T();
}
Run Code Online (Sandbox Code Playgroud)
注意的双提T在声明:一个是T在<T>其中参数化的方法中,第二个是返回类型T.
不幸的是,上述内容在Java中不起作用.由于Java泛型的实现方式,运行时类型信息T不可用,因此上面给出了编译时错误.现在,你可以像这样解决这个约束:
public static <T> T Resolve(Class<T> c) {
return c.newInstance();
}
Run Code Online (Sandbox Code Playgroud)
注意需要传入T.class.这称为运行时类型令牌.这是处理这种情况的惯用方法.
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |