我知道Java的泛型有点不如.Net.
我有一个泛型类Foo<T>的,我真的需要一个实例T在Foo使用参数的构造函数.如何解决Java的局限?
我刚学会了这种精美的语法
Collections.<String>emptyList()
Run Code Online (Sandbox Code Playgroud)
得到一个空List的元素,这些元素应该是类型的String.Java的源代码如下:
public static final List EMPTY_LIST = new EmptyList<Object>();
:
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我以这种方式编写一个方法,其中泛型类型没有出现在参数列表中,那么我有什么方法可以访问成为的实际类T?
我说,到目前为止,我的代码处理方法本来就是这样
private <T> T get(String key, Class<T> clazz) {
// here I can do whatever I want with clazz, e.g.:
return clazz.cast(value);
}
Run Code Online (Sandbox Code Playgroud)
如果我删除了clazz参数,我将无法做到cast().显然我能做到
return (T) value;
Run Code Online (Sandbox Code Playgroud)
但这给了我通常的警告Type safety: Unchecked cast from Object to T.好的,@SuppressWarnings("unchecked")在这里有所帮助,但实际上我想用该方法的预期返回类型做一些事情.如果我添加一个局部变量
T retValue;
Run Code Online (Sandbox Code Playgroud)
我必须用一些东西初始化它,null但没有帮助.在我分配之后
@SuppressWarnings("unchecked") …Run Code Online (Sandbox Code Playgroud) 可能重复:
在Java中创建泛型类型的实例?
我有一些代码:
public class foo<K> {
public void bar() {
K cheese = new K();
// stuff
}
}
Run Code Online (Sandbox Code Playgroud)
这不编译,Intellij的linter告诉我Type parameter 'K' cannot be instantiated directly.
我将如何实例化新副本K.
我正在学习Java的通用,我陷入了一些实例化从泛型参数接收的类型的问题(这在C#中是可能的)
class Person {
public static <T> T say() {
return new T; // this has error
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个:Java中的泛型 - 实例化T
public static <T> T say(Class<?> t) {
return t.newInstance();
}
Run Code Online (Sandbox Code Playgroud)
错误:
incompatible types
found : capture#426 of ?
required: T
Run Code Online (Sandbox Code Playgroud)
这不起作用.以下看起来没问题,但它需要实例化一些类,不能用于静态方法:在java中实例化泛型类型
public class Abc<T>
{
public T getInstanceOfT(Class<T> aClass)
{
return aClass.newInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
这是Java人们说的类型擦除吗?这是类型擦除的限制吗?
这个问题的解决方法是什么?
我正在使用泛型来写东西,令我惊讶的是我发现这不起作用:
class foo<T>{
T innerT = new T();
}
Run Code Online (Sandbox Code Playgroud)
所以我不能实例化泛型类型?有没有办法做到这一点?
嗨!我是一个尝试Java的人.所以我将如何在java中执行以下操作.
在C#中
public T create_an_instance_of<T>(){
T instance = default (T);
// here's usually some factory to create the implementation
instance = some_factory.build<T>();
// or even..
instance = some_factory.build(typeOf(T) );
return instance;
}
Run Code Online (Sandbox Code Playgroud)