java反射取屬性
A. 如何利用java反射,獲取屬性介面的具體類
你可以這么寫:
class BodyImpl implements Body{
//do something
public static void main(String[] args) {
Type[] interfaces = BodyImpl.class.getInterfaces();
ParameterizedType firstInterface = (ParameterizedType) interfaces[0];
Class c = (Class) firstInterface.getActualTypeArguments()[0];
System.out.println(c.getName()); // prints "AtomEntry"
}
}
就得到你所要的介面參數了!
B. java反射生成json如何去掉自帶屬性
java自帶的那些class 這個應該怎麼理解?
org.codehaus.groovy.grails.plugins.web.api.ControllersDomainBindingApi@431a3fe1
這樣的現實無非就是ControllersDomainBindingApi 這個類沒有重寫toString方法 ,才出現這樣的情況
C. JAVA 反射獲取的屬性是復合類型
搞不懂,不都是一樣取的嗎?感覺沒什麼不同啊,比如:
class Person{
public String name;
public Address addr;
}
創建實例版:Person per = new Person();
取屬性:Field faddr = per.getClass.getField("addr");
取值:權Address vaddr = (Address)faddr.get(per);
D. java反射構建屬性對象疑惑
SearchView sv=(SearchView)findViewById(R.id.searchView1); //在布局文件獲取一個SearchView類型的控制項
Class<?>c=sv.getClass();//獲取他的Class位元組碼
Field f=c.getDeclaredField("mQueryTextView");//通過Class c獲取名稱為mQueryTextView的屬性
f.setAccessible(true);//取消許可權審查
TextView tv=(TextView)f.get(sv); //根據傳入的實體類,獲取他的mQueryTextView的變數值,他是TextView類型的,所以強轉一下
E. java反射:得到屬於當前類的欄位問題,怎麼解決
/**
* 通過反射取對象指定欄位(屬性)的值
* @param target 目標對象
* @param fieldName 欄位的名字
* @throws 如果取不到對象指定欄位的值則拋出異常
* @return 欄位的值 */
public static Object getValue(Object target, String fieldName) {
Class<?> clazz = target.getClass();
String[] fs = fieldName.split("\."); try { for(int i = 0; i < fs.length - 1; i++) {
Field f = clazz.getDeclaredField(fs[i]);
f.setAccessible(true);
target = f.get(target);
clazz = target.getClass();
}
Field f = clazz.getDeclaredField(fs[fs.length - 1]);
f.setAccessible(true); return f.get(target);
} catch (Exception e) { throw new RuntimeException(e);
}
}
F. java反射取對象屬性值 不是通過get方法取值
反射不是通過get取值的,是通過該對象的信息,比如說名稱、內存地址等來訪問類,內方法,屬性等,容可以獲取任意對象的信息,但不能獲得私有屬性(private String s=「sd」;)的值,切記
推薦《JAVA核心技術》這本書會對你有幫助的
G. 怎樣利用JAVA反射技術查找一個類的所有屬性
package cn;
import java.lang.reflect.*;
public class Test {
private double d;
public static final int i = 37;
String s = "testing";
public static void main(String args[]) {
try {
Class cls = Class.forName("cn.Test");
Field fieldlist[] = cls.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
System.out.println("name = " + fld.getName());
System.out.println("decl class = " + fld.getDeclaringClass());
System.out.println("type = " + fld.getType());
int mod = fld.getModifiers();
System.out.println("modifiers = " + Modifier.toString(mod));
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
H. 如何利用java反射順序的從一個java類中得到其中定義的成員變數名或者方法
我不太明白你問題的意思
不知道為什麼你理解的那麼復雜,對於java的反射是可以直接獲取欄位Field的,而每一個Field都有其get set方法就相當於getXXX和setXXX了
我不知道你這個ArrayList裡面裝的是什麼,寫個小例子,我理解你需要處理的大概也就是這樣吧
importjava.lang.reflect.Field;
importjava.util.ArrayList;
importjava.util.List;
publicclassA{
privateStringfield1;
privateStringfield2;
publicStringgetField1(){
returnfield1;
}
publicvoidsetField1(Stringfield1){
this.field1=field1;
}
publicStringgetField2(){
returnfield2;
}
publicvoidsetField2(Stringfield2){
this.field2=field2;
}
publicstaticvoidmain(String[]args){
Aa=newA();
a.field1="1";
a.field2="2";
for(Fieldfield:A.class.getDeclaredFields()){
try{
System.out.println(field.get(a));
}catch(IllegalArgumentExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IllegalAccessExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
另外List只是一個集合,也就是某種意義上來說是無序的,他的順序是以裝載的順序定義的,你如何保證List中的數據順序與類的屬性定義順序是一樣的??這種用HashMap是不是要好點??
I. java反射API中,用於確定class對象所對應類的所有public屬性的方法是
您好,獲取該類所有被public屬性修飾的方法是getMethods
J. java反射怎麼設置屬性獲取屬性
Field 有方法 get/set
Object get(Object obj)Returns the value of the field represented by this Field, on
the specified object.
~~~~~~~~~~
void set(Object obj, Object value)Sets the field represented by this Field object on the
specified object argument to the specified new value.
~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~