1. 程式人生 > 其它 >thymeleaf中th:text和th:utext的區別

thymeleaf中th:text和th:utext的區別

當我們不知道類是否加了set/get方法,但又希望能夠得到它裡面的一些屬性或方法的時候,需要通過反射來獲取,下面我建立了一個student類,但是我沒有加set和get方法:

public class Student {
    private Integer id;
    private String name;
    private String pass;
    public String phone;
}

反射:先獲得類,通過類.getInstance,得到物件,通過類名.getFileds可以得到類裡面共有屬性,如果要訪問私有的,可以類名.getDeclaredFileds,可以得到類裡面所有的私有屬性,如果對屬性賦值,需要先將可訪問屬性改為true,然後再利用set方法來進行賦值,詳情操作見下:

Class<Student> studentClass = Student.class;//建立類
Student student = studentClass.newInstance();//建立物件
Field[] declaredFields = studentClass.getDeclaredFields();//得到全部屬性
declaredFields[3].setAccessible(true);//開啟訪問許可權
declaredFields[3].set(student,"10010");//賦值

得到類的三種方式:

  1. 通過類名獲得:
Class<Student> studentClass = Student.class;
  1. 通過物件獲得:
Student student=new Student();
Class<? extends Student> aClass = student.getClass();
  1. 通過類的路徑獲得
Class<?> aClass1 = Class.forName("com.study.bean.Student");//但是這裡有個泛型,如果直接建立物件會顯示object

得到類之後得到屬性的四種方法:

Field getDeclaredField(String name) 
返回一個Field物件,得到指定已宣告欄位 
Field[] getDeclaredFields() 返回的是Field陣列,返回已宣告的全部欄位
    
Field getField(String name) 
返回一個Field物件,得到指定公共成員欄位   
Field[] getFields() 返回的是Field陣列,返回公共的全部欄位

得到物件的方法:(在這裡不是直接new)這裡預設呼叫類的無參構造,如果沒有無參構造會報異常:NoSuchMethodException

T newInstance() 

利用物件來賦值:

void set(Object obj, Object value) 

方法也是一樣的方式來獲取和訪問:

Class<?> aClass1 = Class.forName("com.study.bean.Student");
//上面有泛型,下面需要強制轉化
Student student1 = (Student) aClass1.newInstance();
Field[] declaredFields = aClass1.getDeclaredFields();

//得到類裡面的公共方法:
Method setId = aClass1.getMethod("setId", Integer.class);
//賦值
setId.invoke(student1,3627);
Method getId = aClass1.getDeclaredMethod("getId");
//取值
System.out.println(getId.invoke(student1));

//得到類裡面的私有方法:
Method show = aClass1.getDeclaredMethod("show", Integer.class, String.class, String.class, String.class);
//先開啟許可權
show.setAccessible(true);
//呼叫方法
show.invoke(student1, 23, "liku", "password", "1008611");