- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于泛型的问题。
我有一个函数,它知道我想要创建的对象的类类型:
public static <T> XmlParserInterface<T> createXmlParser(Class<T> rootType, String currentTagName) {
XmlParserInterface<T> result = null;
if (rootType.equals(List.class)) {
result = new XmlParserList<T>();
}
// ...
result.init(rootType, currentTagName);
return result;
}
在该函数中,对于这种特殊情况,我用 rootType
来调用它是List<String>
.
在我的init
函数,我再次传递 rootType
这样我就可以创建一个 ArrayList<something>
。我的问题是找到 something
因为我需要它来生成更多对象。在这种情况下,它将是 String
,但如果是 List<List<String>>
则可以更深入。甚至是我检查其 set
的自定义 POJO函数来填充它们。
我尝试做 rootType.getTypeParameters()[0]
,但它只返回我 E
。我需要知道 E
的实际类别.
如果有人能回答的话,谢谢:)
最佳答案
您需要显式添加类型信息 - 它在运行时不可用,因为泛型类型参数在编译期间被删除。而且由于您需要明确指定这一点,因此您无法仅使用泛型来做您想做的事情(据我所知)。相反,您需要进行一些转换(并传递某种类结构来指示您想要构造的内容)。
请参阅 Wadler 撰写的有关 Java 泛型的优秀书籍(实际上,如果您尝试编写这样的代码,则需要购买并阅读该书)。
如果你总是有,比如 List
X
public <Y, X extends List<Y>> X<Y> myMethod(Class<X<Y>> xClass, Class<Y> yClass, ...) { ...}
(这只是凭内存,但我希望你能明白这个想法 - 你传递了 X 和 Y,并且使用限定类型注释来表达它们之间的关系。真的,请阅读 Wadler 的书!)。
如果您想手动强制执行操作,则只需传入不带类型的 Class 值列表,并添加大量转换。
关于Java 将 List<String> 作为 Class<T> 传递,想要知道列表的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004952/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!