1. 程式人生 > >寫的一個簡單的工具類,可以做物件型別的判斷和迭代出一個物件所有屬性的值

寫的一個簡單的工具類,可以做物件型別的判斷和迭代出一個物件所有屬性的值

import java.lang.reflect.Field;

/**
 * @author songzheng
 */
public class TypeUtil {
    /**
     * 得到某個物件型別物件
     */
	public static Class<?> getClass(Object obj) {
    	if (obj instanceof Integer) {
    		return Integer.TYPE; 
    	} else if (obj instanceof Boolean) {
    		return Boolean.TYPE;
    	} else if (obj instanceof Long) {
    		return Long.TYPE;
    	} else if (obj instanceof Short) {
    		return Short.TYPE;
    	} else if (obj instanceof Double) {
    		return Double.TYPE;
    	} else if (obj instanceof Float) {
    		return Float.TYPE;
    	} else if (obj instanceof Character) {
    		return Character.TYPE;
    	} else if (obj instanceof Byte) {
    		return Byte.TYPE;
    	}
    	return obj.getClass();
    }
	/**
	 * 判斷某個物件是否為裝箱的基本型別物件或基本型別
	 */
	public static boolean isBasicType(Object obj) {
		final String[] types = {"int", "char", "boolean","long", "double", "float", "byte", "short"};
		String clazzName = getClass(obj).getName();
	    int j = 0;
		for (int i = 0; i < types.length; i++) {
	    	if (clazzName.equals(types[i])) {
	    		break;
	    	}
	    	j++;
	    }
		if (j <= 7) {
			return true; 
		} else {
			return false;
		}
	}
	/**
	 * 判斷某物件是否為字串
	 */
	public static boolean isString(Object obj) {
		return obj instanceof String;
	}
	/**
	 * 迭代出一個物件的全部基本屬性
	 */
	public static void recurse(Field[] fs, Object obj, List<Object> list) throws IllegalArgumentException, IllegalAccessException {
		
		for (int i = 0; i < fs.length; i++) {
			int j = 0;
			Field f = fs[i];
			f.setAccessible(true);
			Object v = f.get(obj);
			if (isBasicType(v)) {
				j++;
				list.add(v);
			} 
			if (isString(v)) {
				j++;
				list.add(v);
			}
			if (j == fs.length)
				continue;
			if (!(isBasicType(v) || isString(v))) {
			    recurse(v.getClass().getFields(), v, list);
			}
		}
	}
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {

		List<Object> list = new ArrayList<Object>();
		Name n = new Name("sz", "yy", new Address("aa", "bb"));
		Person p = new Person(11, n);
		recurse(p.getClass().getDeclaredFields() ,p, list);
		System.out.println(list);
	}
}
class Person {
	
	private int age;
	private Name name;
	public Person(int age, Name name) {
		this.age = age;
		this.name = name;
	}
}
class Name {
	public Name(String first, String second, Address address) {
		this.first = first;
		this.second = second;
		this.address = address;
	}
	public String first;
	public String second;
	public Address address;
	
}
class Address {
	public Address(String age, String name) {
		this.age = age;
		this.name = name;
	}
	public String age;
	private String name;
}

相關推薦

一個簡單工具可以物件型別判斷一個物件所有屬性

import java.lang.reflect.Field; /** * @author songzheng */ public class TypeUtil { /** * 得到某個物件型別物件 */ public static Cl

分治:分治動態規劃的區別二分檢索遞迴方式實現

分治法 分治一般可以直接使用遞迴實現,在不考慮空間消費的情況下和迭代方式時間消耗相差不多 ================================================================== 分治一般形式: T(n) = k*T(n/m) + f(

LuaJavaScript的閉包器筆記

在JS中一直不太理解閉包這個概念 ,有幸在學習lua程式設計中重新理解了下閉包和迭代器 這個是書上的原文: 迭代器是一種支援指標型別的結構,它可以遍歷集合的每一個元素。在 Lua 中我們 常常使用

微服務應用大行其道我提供一個dtoentity轉換工具方便大家轉換機械程式碼多陪陪家人

微服務應用大行其道,我提供一個dto和entity轉換工具類,方便大家做轉換,少寫機械程式碼,多陪陪家人。 該工具類主要是對do

做一個簡單的銀行、賬戶演示程式。 (1)定義一個賬戶類,包含使用者名稱、密碼、餘額等屬性、存錢、取錢等方法。 (2)定義一個銀行類,包含銀行名、賬戶列表等屬性,開賬戶、查賬戶的功能。賬戶列表可以使用集

做一個簡單的銀行、賬戶演示程式。 (1)定義一個賬戶類,包含使用者名稱、密碼、餘額等屬性、存錢、取錢等方法。 (2)定義一個銀行類,包含銀行名、賬戶列表等屬性,開賬戶、查賬戶的功能。賬戶列表可以使用

一個簡單IP防刷工具 10分鐘內只最多允許1000次使用者操作

  IP防刷,也就是在短時間內有大量相同ip的請求,可能是惡意的,也可能是超出業務範圍的。總之,我們需要杜絕短時間內大量請求的問題,怎麼處理?   其實這個問題,真的是太常見和太簡單了,但是真正來做的時候,可能就不一定很簡單了哦。   我這裡給一個解決方案,以供參考! 主要思路或者需要考慮的問題為:

一個簡單工具實體bean轉換成map

簡單的實體類: package cn.ibm.com.mytest; public class Human {     private Integer hid;     private String hname;          public Integer getHid

C#.NET 程序員的福利自己一個XML操作可實現像jquery一樣方便的xml操作且不用專門去處理命名空間。

console region ignorecas node 處理 命名空間 void clone 一個 此工具是進入一家新公司之後實現的,主要是工作當中操作 xml 的時間太多,因為公司按任務計“工作量”,領導給我安排的時間遠遠不夠完善此工具【悲哀的

一個大牛的JDBC工具

事情過去好久了...大概三年前 記著那個時候,此大牛(IBM某架構),在UE下一氣呵成,沒有任何多餘程式碼,甚至不用註釋都可以看得明白此段程式碼用途,現在仔細看了,雖然很基本,但是仍舊覺著此段程式碼很爽!貼出來,讓大家有時間的話,都大致看一下... package com.

在實際業務中用一個簡單泛型以及父子的轉換

這幾天回去看了下之前的專案原始碼,發現極為粗製濫造,CRUD成了習慣後,技術很容易停滯不前,大部分時間用在了CV上,程式碼複製過來就用,也不加一改動、抽象、封裝下。 這裡舉一個小例子。 有三個業務功能,材料計劃,材料申請,採購計劃。都有工作流參與,需要記錄每一步中材料的數量和變化。共有屬性:材料名稱,材料

[Android開發] Json解析工具一個搞定Json的解析

一、簡介 利用遞迴的方式反射解析到bean裡面 二、詳細程式碼 1、 Json格式 例如伺服器指定規定json格式為: { "code": "……" , // 返回代號,預留欄位,預設返回null "type":"ER

使用POI一個生成Excel的工具。包含了匯出Excel解析Excel方法

PoiExcelUtils.java /** * */ package com.common.office; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStrea

設計一個getMin功能的棧,如果面試官讓你一個數組一定不要用指標去管理new出來原生的陣列那就是在給自己挖坑

//設計實現一個getMin功能的棧 #include <iostream> #include <stack> using namespace std; class GetMinStack { public:     void push(int x)

JSON工具物件轉JSON

基於每次都要寫類似這樣:JSONArray arr = new JSONArray(); Iterator<Campus> it = list.iterator(); while (it.hasNext()) { Campus campus = (Campus)

Java的Excel檔案操作工具包括讀、、合併等功能

一、直接上程式碼: package com.cycares.crm.utils.ExcelUtil; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS

一個Java Jenkins工具支援建立構建帶引數構建刪除JenkinsJob停止Jenkins Job任務等

Jenkins是一個很強大的持續整合的工具,除了在Jenkins的頁面上我們可以去構建我們的job,我們也可以通過java程式碼來通過呼叫jenkins的api來做一些事情,使得我們的java web專案更加便捷,下面是我的一個工具類。 package com.vip.w

一個Android下ping的簡單工具

這是一個自己寫的Android下的ping的簡單工具類,主要是通過ping獲取到返回字串之後擷取資訊得到自己想要的資料。不多說,上原始碼 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream

華仔-技術部落格(《面向物件葵花寶典》程式碼的架構師技術的管理者)

面向物件葵花寶典 面向物件葵花寶典,主要從理論、實踐、技巧3個方面獨樹一幟的闡述了面向物件相關的知識和技能。教你如何從需求開始,一步一步、環環相扣的走到編碼階段,理論闡述別具一格,實戰技巧簡單好用,是面向物件快速入門和提升的”葵花