[英]Passing a generic class to a java function?
将类传递给java函数时是否可以使用泛型?
我希望做这样的事情:
public static class DoStuff
{
public <T extends Class<List>> void doStuffToList(T className)
{
System.out.println(className);
}
public void test()
{
doStuffToList(List.class); // compiles
doStuffToList(ArrayList.class); // compiler error (undesired behaviour)
doStuffToList(Integer.class); // compiler error (desired behaviour)
}
}
理想情况下,List.class和ArrayList.class行可以正常工作,但Integer.class行会导致编译错误。 我可以使用Class
作为我的类型而不是T extends Class<List>
但是我不会捕获上面的Integer.class案例。
public <T extends List> void doStuffToList(Class<T> clazz)
毕竟你要传递一个Class
- 参数应该是Class
类型,并且它的类型参数应该是有限的。
实际上, <T extends Class<..>
表示T == Class
,因为Class
是final
。 然后你将类的类型参数修复为List
- 而不是任何List
,只是List
。 所以,如果你想让你的例子工作,你需要:
public <T extends Class<? extends List>> void doStuffToList(T clazz)
但这根本不需要。
ArrayList.class的类型为Class <ArrayList>,而参数应为Class <List>。 这些类型不兼容,原因与List <Integer>不是List <Number>的原因相同。
您可以按如下方式定义函数,并获得预期的行为:
public void doStuffToList(Class<? extends List> className)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.