1. 程式人生 > >JAVA之通過反射遍歷JavaBean成員變數和方法

JAVA之通過反射遍歷JavaBean成員變數和方法

在實際的程式碼開發中,難免會遇到資料業務邏輯複雜的表,對映到實體類之後所有的欄位都會變成對應類中的成員變數(前面有介紹外掛自動生成實體類的外掛介紹0.0)

在處理這些數量巨大的實體類的時候,取值賦值無疑變成了非常枯燥的剪下複製。下面介紹一下通過反射來獲取實體類中成員變數和方法的工具類。

public static String Reflect(Object model)
			throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		Field[] field = model.getClass().getDeclaredFields(); // 獲取實體類的所有屬性,返回Field陣列
		String content = "";
		for (int j = 0; j < field.length; j++) { // 遍歷所有屬性
			String name = field[j].getName(); // 獲取屬性的名字
			name = name.substring(0, 1).toUpperCase() + name.substring(1); // 將屬性的首字元大寫,方便構造get,set方法
			String type = field[j].getGenericType().toString(); // 獲取屬性的型別
			if (type.equals("class java.lang.String")) { // 如果type是類型別,則前面包含"class
															// ",後面跟類名
				Method m = model.getClass().getMethod("get" + name);
				String value = (String) m.invoke(model); // 呼叫getter方法獲取屬性值
				if (value != null) {
					content += value + "\t";
				}
			}
			if (type.equals("class java.lang.Integer")) {
				Method m = model.getClass().getMethod("get" + name);
				Integer value = (Integer) m.invoke(model);
				if (value != null) {
					content += value + "\t";
				}
			}
			if (type.equals("class java.lang.Short")) {
				Method m = model.getClass().getMethod("get" + name);
				Short value = (Short) m.invoke(model);
				if (value != null) {
				}
			}
			if (type.equals("class java.lang.Double")) {
				Method m = model.getClass().getMethod("get" + name);
				Double value = (Double) m.invoke(model);
				if (value != null) {
				}
			}
			if (type.equals("class java.lang.Boolean")) {
				Method m = model.getClass().getMethod("get" + name);
				Boolean value = (Boolean) m.invoke(model);
				if (value != null) {
					String cc = value == true ? "1" : "0";
					content += cc + "\t";
				}
			}
			if (type.equals("class java.util.Date")) {
				Method m = model.getClass().getMethod("get" + name);
				Date value = (Date) m.invoke(model);
				if (value != null) {
					content += value + "\t";
					System.out.println(type + "attribute value:" + value.toLocaleString());
				}
			}
		}
		return content;
	}
上面程式碼是在實際運用的時候的程式碼,目的是獲取成員變數名以及實體類中變數所包含的值。放在一行資料裡面。進行輸出。

相關推薦

JAVA通過反射JavaBean成員變數方法

在實際的程式碼開發中,難免會遇到資料業務邏輯複雜的表,對映到實體類之後所有的欄位都會變成對應類中的成員變數(前面有介紹外掛自動生成實體類的外掛介紹0.0) 在處理這些數量巨大的實體類的時候,取值賦值無疑變成了非常枯燥的剪下複製。下面介紹一下通過反射來獲取實體類中成員變數和方

java中多型父類的成員變數方法呼叫問題

class Super { String name = "父類名字"; public void setName(String name) { System.out.println(this.getClass());

java通過反射物件得到屬性\反射賦值

import lombok.Data; import java.lang.reflect.Field; import java.lang.reflect.Method; @Data public class MyFK { String name; Stri

Java數組

public int ack each [] ava print 數組 for 1 package basic; 2 //數組遍歷方法 3 public class ForEach { 4 5 public static void main(Str

Java 遞歸目錄

public ive exists director pos string absolut info desc Java 之遞歸遍歷目錄 一、內容   輸出指定目錄(文件夾)下的所有文件(包括目錄)的絕對路徑 二、源代碼:RecursiveListDirectory.jav

javaMap集合幾種方法

package cn.com.javatest.collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * java之Map集合遍歷幾種方法 * * @author:

JavaList集合的幾種方法

package cn.com.javatest.collection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Java之List集合遍歷的幾種方法 * * @au

ES66種對象屬性的方法

對象 一個 object 個數 遍歷 for get obj clas 1.for ... in 循環遍歷對象自身的和繼承的可枚舉屬性(不含Symbol屬性). 2.Obejct.keys(obj),返回一個數組,包括對象自身的(不含繼承的)所有可枚舉屬性(不含S

OpenCV:通過Mat影象的幾種方法

我們在實際應用中對影象進行的操作,往往並不是將影象作為一個整體進行操作,而是對影象中的所有點或特殊點進行運算,所以遍歷影象就顯得很重要,如何高效的遍歷影象是一個很值得探討的問題。 Color Reduce 還是使用經典的Reduce Color的例子,即對影象

Java中的null物件也可以訪問static成員變數方法

      一般來說,一個類的物件要在例項化之後才可以訪問類中的成員變數和方法。如果它還是null,通常意義上我們就認為它不能訪問類中的成員。實際上確實不提倡這樣,而且null物件確實不能訪問例項成員(變數和方法),否則會引發NULLPointerException錯誤。

Java介面成員變數方法預設修飾符

 Java的interface中,成員變數的預設修飾符為:public static final 所以我們在interface中定義成員變數的時候,可以 1:public static final String name = "張三"; 2:String name = "張三"; 以上兩種都可以,老司機一般都

Java 類的成員變數方法以及構造方法

       首先要說的是物件,簡單的說,物件是對客觀世界中的實體的對映。通俗地理解就是客觀世界的每一個事物都是一個物件。在java中,我們需要了解到的還有這個物件的屬性和方法,即這個是事物的外觀、大小等可描述的客觀存在(就是所說的屬性)還有這個事物所能實現的功能或者事物的

java中父類子類的成員變數成員方法在記憶體分配上的一些理解

先宣告,以下是個人自己的理解(我也怕誤人子弟),如有錯誤請指出一起學習交流。先上程式碼:package myTest; class A { int num = 5; A() { show(); } public void show() { System.

private修飾的成員變數方法不能被繼承?

看完程式碼就懂了: public class B extends A { public static void main(String[] args) { B b = new B(); System.out.println(b.getVal2());

static方法中,不能訪問類內非static成員變數方法

因為我們知道靜態的方法可以在沒有建立例項時使用,而申明為非靜態的成員變數是一個物件屬性,它只有在物件存在時引用,因此如果在物件未建立例項時我們在靜態方法中呼叫了非靜態成員方法自然是非法的,所以編譯器會

C++ 兩個包含類互相呼叫彼此的類成員變數方法

      在編寫C++程式時,有時候我們想在一個類中呼叫另一個類中的成員變數或方法,比如:兩個類 A和B ,A包含B,一般A中呼叫B中的方法比較簡單,重點是子類B如何呼叫父類A中的成員變數或方法呢?

重寫——上轉型物件不能操作子類新增成員變數方法但可以操作子類繼承重寫的方法

上轉型物件不能操作子類新增成員變數和方法但可以操作子類繼承和重寫的方法 子類重寫父類的前提是;方法名一樣,引數型別和個數一樣。 舉一例可以說明之:  class Father { public Father() { }public void shout(Object word

受保護的成員變數方法

用protected修飾的成員變數和方法被稱作受保護的成員變數和受保護方法。作用域當前類同一package子孫類其他packagepublic ✔✔✔✔protected✔✔✔✘friendly✔✔✘✘private✔✘✘✘

通過Java對象來成員方法成員變量,構造函數

return pri typename static spa tde log 繼承 red 1 package classTest; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.ref

Java基礎Map的

print try main map.entry void clas 推薦 highlight col 遍歷Map集合,有四種方法: public static void main(String[] args) { Map<String, String&g