相关疑难解决方法(0)

在Java中实例化泛型类

我知道Java的泛型有点不如.Net.

我有一个泛型类Foo<T>的,我真的需要一个实例TFoo使用参数的构造函数.如何解决Java的局限?

java generics

148
推荐指数
3
解决办法
17万
查看次数

如果没有参数,如何获得泛型类?

我刚学会了这种精美的语法

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 generics

9
推荐指数
1
解决办法
6033
查看次数

实例化通过泛型给出类的类的对象

可能重复:
在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 generics

8
推荐指数
1
解决办法
5275
查看次数

实例化泛型参数

我正在学习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人们说的类型擦除吗?这是类型擦除的限制吗?

这个问题的解决方法是什么?

java generics

6
推荐指数
1
解决办法
238
查看次数

Java泛型为什么我不能实例化泛型类型

我正在使用泛型来写东西,令我惊讶的是我发现这不起作用:

class foo<T>{

 T innerT = new T();

}
Run Code Online (Sandbox Code Playgroud)

所以我不能实例化泛型类型?有没有办法做到这一点?

java generics type-erasure

5
推荐指数
3
解决办法
2436
查看次数

Java泛型 - 获取类型

重复:在java中实例化泛型类型

嗨!我是一个尝试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)

java generics

3
推荐指数
1
解决办法
285
查看次数

标签 统计

generics ×6

java ×6

type-erasure ×1