![](/img/trans.png)
[英]Is there any way to tell PowerMock not to use MockClassLoader for all objects which are instantiated via java reflection?
[英]Perform java reflection on instantiated objects
我想獲取已實例化的對象的所有字段。 從那里,我喜歡獲取字段名稱和字段值並將其附加到字符串
public static void main(String[] args) {
TestObject obj = new TestObject();
obj.setName("Toothbrush");
obj.setType("Toiletries");
String result = generateQuery(obj);
}
public static String generateQuery(TestObject obj){
String result;
Field[] lists = obj.getClass().getFields();
for(Field i : lists){
try {
result += i.getName();
result += i.get(obj);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return result;
}
public class TestObject(){
private String name;
private String type;
// getters and setters
}
現在我的列表變量為空。 我已經檢查了各種Java反射教程,它們都在執行反射之前實例化了一個新對象。 就我而言,我想實例化一個對象並設置某些變量,然后執行反射。 會要求幫助的,謝謝
您的字段是私有的-很好,但是在Class.getFields
(強調我的)上不能很好地發揮作用:
返回一個包含Field對象的數組,該對象反映此Class對象表示的類或接口的所有可訪問公共字段。
您應該改用Class.getDeclaredFields
:
返回一個Field對象數組,該數組反映由該Class對象表示的類或接口聲明的所有字段。 這包括公共,受保護,默認(程序包)訪問和私有字段,但不包括繼承的字段。
為了訪問這些值,您需要在field.get(obj)
之前調用field.setAccessible(true)
field.get(obj)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.