英文:
Pass class with parameter into Class<T>
问题
有没有办法我们可以将带有参数的类类型传递给一个接受 Class<T>
的方法?
假设我有这个方法:
public <T> T getProperty(Class<T> type)
给定这个方法 getProperty
,它会返回我们传递的任何类型。有没有办法我可以传递类似于 Map
并带有参数的类呢?就像这样:
getProperty(Map<String, String>.class)
不幸的是,上面的代码片段会给我编译错误。使用 Map.class
是可以的,但我想消除泛型警告并且拥有强类型的参数。
英文:
Is there a way we can pass class type with parameter into a method that accepts Class<T>
?
Let's say I have this method:
>public <T> T getProperty(Class<T> type)
Given the method, getProperty
, which returns whatever type we passed, is there a way I can pass class like Map
with parameter? Lets say like this:
> getProperty(Map<String, String>.class)
Unfortunately, the code snippet above is giving me compilation error. Using Map.class
will work though but I would like to eliminate the generic warning and have a strong-typed argument.
答案1
得分: 2
实际上,使用强类型参数是没有意义的。因为 Java 会在运行时擦除类型参数。所有类型的 Map 都引用相同的类对象。
即使你可以这样做,对于 getProperty(Class type)
方法来说,传递 Map.class
还是 Map<String, String>.class
没有任何区别。因此,它能做的最好的事情就是返回原始类型。
英文:
In fact use strong-typed argument is meaningless. Because java will erase the type parameter at runtime. All kinds of Map refer to the same Class Object.
Even if you can,it make no difference for getProperty(Class type)
method whether you pass Map.class
or Map<String,String>.class
. So the best thing it can do is return a raw type.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论