利用反射打印对象的所有属性及调用对象方法

利用java反射输出对象的所有属性,调用对象的方法

public class ClassUtil {
   private static final Logger logger = LoggerFactory.getLogger(ClassUtil.class);
   
   public static final boolean isNull(String str){
	   if(str != null && !str.equals("")){
		   return false;
	   }
	   return true;
   }
   
   /**
	 * 20150729  输出对象的所有属性值
	 * */
	public static String toString(Object obj){ 
		String s = ""; 
		try { 
		s = getPropertyString(obj); 
		} catch (Exception e) { 
		// TODO Auto-generated catch block 
		e.printStackTrace(); 
		} 
		return s; 
	} 

	public static String getPropertyString(Object entityName) throws Exception { 
		Class<? extends Object> c = entityName.getClass(); 
		Field field [] = c.getDeclaredFields(); 
		StringBuffer sb = new StringBuffer(); 

		sb.append("------ " + " begin ------\n"); 
		for(Field f : field){ 
		sb.append(f.getName()); 
		sb.append(" : "); 
		sb.append(invokeMethod(entityName,f.getName(),null)); 
		sb.append("\n"); 
		} 
		sb.append("------ " + " end ------\n"); 
		return sb.toString(); 
	} 

	public static Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception{
		Class<? extends Object> ownerClass = owner.getClass();

		methodName = methodName.substring(0, 1).toUpperCase() + methodName.substring(1);
		Method method = null;
		try {
		method = ownerClass.getMethod("get" + methodName);
		} catch (SecurityException e) {
		// TODO Auto-generated catch block
		//e.printStackTrace();
		} catch (NoSuchMethodException e) {
		// TODO Auto-generated catch block
		//e.printStackTrace();
		return " can't find 'get" + methodName + "' method";
		}

		return method.invoke(owner);
	}
	
	//20170217 从oss url地址中获取文件名
		public static String getFileNameFromUrl(String fileUrl){
			String fileName = "";
			if(!ClassUtil.isNull(fileUrl)){
				Integer index = fileUrl.lastIndexOf("/");
	    		 if(index>-1){
	    			 fileName = fileUrl.substring(index+1);	 
	    		 }
			}
			
			return fileName;
		}
		
		//20170221 若获取的变量为null 则返回空字符串
		public static String dealStrWithNull(String str){
			return (str == null? "":str);
		}
		
		//2017020 将oss url地址中的文件名进行编码后 如http://www.123.com/attachment/201702/20/20170220104327/test1+.jpg
		//对url中的文件名进行utf-8编码  以防文件名中存在加号等特殊符号  导致附件无法下载
		public static String encodeFileNameForUrl(String fileUrl) throws UnsupportedEncodingException{
			String fileName = "";
			if(!ClassUtil.isNull(fileUrl)){
				Integer index = fileUrl.lastIndexOf("/");
	    		 if(index>-1){
	    			 String urlPrefix = fileUrl.substring(0,index+1);			 
	    			 fileName = fileUrl.substring(index+1);	
	    			 fileName = URLEncoder.encode(fileName,"UTF-8");
	    			 
	    			 fileUrl = urlPrefix + fileName;
	    		 }
			}
			
			return fileUrl;
		}
		
		//对oss url中的文件名进行utf-8解码  以防文件名中存在加号等特殊符号  导致附件无法下载
		public static String decodeFileNameForUrl(String fileUrl) throws UnsupportedEncodingException{
			String fileName = "";
			if(!ClassUtil.isNull(fileUrl)){
				Integer index = fileUrl.lastIndexOf("/");
		    		if(index>-1){
		    			String urlPrefix = fileUrl.substring(0,index+1);			 
		    			fileName = fileUrl.substring(index+1);	
		    			fileName = URLDecoder.decode(fileName,"UTF-8");
		    			 
		    			fileUrl = urlPrefix + fileName;
		    		}
			}
				
			return fileUrl;
		}
		
		/**
		 * 输出各个类型的字节数
		 * @param args
		 */
		private static void calSize() {  
			System.out.println("Integer: " + Integer.SIZE/8);           // 4  
			System.out.println("Short: " + Short.SIZE/8);               // 2      
			System.out.println("Long: " + Long.SIZE/8);                 // 8  
			System.out.println("Byte: " + Byte.SIZE/8);                 // 1  
			System.out.println("Character: " + Character.SIZE/8);       // 2  
			System.out.println("Float: " + Float.SIZE/8);               // 4  
			System.out.println("Double: " + Double.SIZE/8);             // 8  
			System.out.println("Boolean: " + Boolean.toString(false));  
	 
		}
		
		/**
		 * 将输入字符串以十进制输出
		 * */
		public static void hexToDecimal1() {
			BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
			String line;
			try {
				while((line = bufr.readLine()) != null) {
					line = line.substring(2);//去掉0x前缀
					int result = Integer.parseInt(line,16);
					System.out.println(result);
				}
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
		
		/**
		 * 将输入十六进制字符串以十进制输出
		 * */
		public static void hexToDecimal() {
			BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
			String line;
			BigInteger base = new BigInteger("10");
			try {
				while((line = bufr.readLine()) != null) {
					line = line.substring(2);//去掉0x前缀
					//int result = Integer.parseInt(line,16);
					BigInteger result = new BigInteger("0");
					for(int i=0; i<line.length(); i++) {
						char ch = line.charAt(line.length() - 1 - i);
						if(ch >= 'A' && ch <= 'F') {
							BigInteger tmp = base.pow(i).multiply(new BigInteger(Integer.toString(ch - 'A' + 10)));
							result.add(tmp);
						}else {
							BigInteger tmp = base.pow(i).multiply(new BigInteger(Integer.toString(ch)));
							result.add(tmp);
						}
					}
					
					System.out.println(result);
				}
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
		
		/**
		 * 获取利用反射获取类里面的值和名称
		 * @param obj
		 * @return
		 * @throws IllegalAccessException
		 */
		 public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
				 Map<String, Object> map = new HashMap<>();
				 Class<?> clazz = obj.getClass();
				 System.out.println(clazz);
				 for (Field field : clazz.getDeclaredFields()) {
					 field.setAccessible(true);
					 String fieldName = field.getName();
					 Object value = field.get(obj);
					 map.put(fieldName, value);
				 }
				 return map;
		 }
		
		    /**
             * 20181019 添加 调用dao方法  前后 添加日志
             * @param owner 调用的对象或spring bean
             * @param methodName 方法名
             * @param args 参数map
             * @return map
            */
		public static Map<String, Object> invokeDaoMethod(Object owner, String methodName, HashMap<String, Object> args) throws Exception{
			Class<? extends Object> ownerClass = owner.getClass();          
			logger.info("class[" + owner.getClass().getName() + "] - method[" + methodName + "]");	
			logger.info("ownerClass: ");
			logger.info("owwnerClass is null? " + (ownerClass == null));
			Method method = null;
			try {
				//method = ownerClass.getMethod(methodName,args.getClass());
				method = ReflectionUtils.findMethod(ownerClass, methodName, args.getClass());
				logger.info("method is null? " + (method == null));
			} catch (SecurityException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 

			return objectToMap(ReflectionUtils.invokeMethod(method, owner, args));
		}
		
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			hexToDecimal1();
		}

   
}

猜你喜欢

转载自blog.csdn.net/xyr05288/article/details/83272343