我想从类型为T的对象中获取所有字段及其值。说我有:
something
<html>
<head>
<script type="text/javascript" src="myjavascript.js"></script>
</head>
<body>
<div class="myClass" data-attr="whateverisinthesession"></div>
</body>
</html>
然后是Main类,我想要GenericType的字段:
public class Start {
public void startMethod(){
Main<GenericType> main = new Main<>();
main.work(new GenericType());
}
}
答案 0 :(得分:0)
首先,您需要获得Class
T
,然后通过反思,您可以获得所有字段。
abstract class A<T> {
Class<T> clazz;
void doGetClass() {
Type genType = this.getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
this.clazz = (Class<T>) params[0];
}
}
但是您必须实例化泛型类型,如此,将T
实例化为String
:
class B extends A<String>{
}
然后
B b = new B();
b.doGetClass();// b.clazz is String.class
答案 1 :(得分:0)
按照@ BalwinderSingh的回答,我来到这里:
public void work(T t){
for(Field f : t.getClass().getDeclaredFields()){
try {
f.setAccessible(true);
String name = f.getName();
Object value = f.get(object);
}catch(Exception e){
e.printStackTrace();
}
}
}
虽然在开始时比我简单。谢谢大家。
答案 2 :(得分:0)
如果在类型定义中捕获T
,则只能解析class StringMain extends Main<String> {}
。例如:
Type<?> t = TypeResolver.resolveRawArgument(Main.class, StringMain.class);
assert t == String.class
然后您可以使用TypeTools:
之类的内容解决问题java -DR_HOME=<the-location> -jar application.jar
干杯