相关疑难解决方法(0)

在运行时获取泛型类

我怎样才能做到这一点?

public class GenericClass<T>
{
    public Type getMyType()
    {
        //How do I return the type of T?
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试的所有东西总是返回类型Object而不是使用的特定类型.

java generics reflection

474
推荐指数
16
解决办法
53万
查看次数

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

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

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
查看次数

标签 统计

generics ×2

java ×2

reflection ×1