/*
* File:ClassUtil.java
* User:xiaocao000
* Date:2009-3-14
*/
package com.xiaocao000.lang;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* TODO ClassUtil
*
* @author xiaocao000
* Date:2009-3-14
* @version 1.0
*/
public class ClassUtil
{
public static boolean isJavaBasicType(Class<?> clazz)
{
if (clazz == null)
{
return false;
}
return clazz.isPrimitive() || Number.class.isAssignableFrom(clazz)
|| Character.class.isAssignableFrom(clazz)
|| Boolean.class.isAssignableFrom(clazz)
|| CharSequence.class.isAssignableFrom(clazz)
|| Enum.class.isAssignableFrom(clazz)
|| Date.class.isAssignableFrom(clazz)
|| Calendar.class.isAssignableFrom(clazz);
}
/**
* 判断指定的类是否为Collection(或者其子类或者其子接口)。
*
* @param clazz 需要判断的类
* @return true:是Collection false:非Collection
*/
public static boolean isCollection(Class<?> clazz)
{
if (clazz == null)
{
return false;
}
return Collection.class.isAssignableFrom(clazz);
}
/**
* 判断指定的类是否为Map(或者其子类或者其子接口)。
*
* @param clazz 需要判断的类
* @return true:是Map false:非Map
*/
public static boolean isMap(Class<?> clazz)
{
if (clazz == null)
{
return false;
}
return Map.class.isAssignableFrom(clazz);
}
/**
* 判断指定的类是否为Java基本型别的数组。
*
* @param clazz 需要判断的类
* @return true:是Java基本型别的数组 false:非Java基本型别的数组
*/
public static boolean isPrimitiveArray(Class<?> clazz)
{
if (clazz == null)
return false;
if (clazz == byte[].class)
return true;
else if (clazz == short[].class)
return true;
else if (clazz == int[].class)
return true;
else if (clazz == long[].class)
return true;
else if (clazz == char[].class)
return true;
else if (clazz == float[].class)
return true;
else if (clazz == double[].class)
return true;
else if (clazz == boolean[].class)
return true;
else
{ // element is an array of object references
return false;
}
}
/**
* 判断指定的类是否为Java基本型别的数组。
*
* @param clazz 需要判断的类
* @return true:是Java基本型别的数组 false:非Java基本型别的数组
*/
public static boolean isPrimitiveWrapperArray(Class<?> clazz)
{
if (clazz == null)
return false;
if (clazz == Byte[].class)
return true;
else if (clazz == Short[].class)
return true;
else if (clazz == Integer[].class)
return true;
else if (clazz == Long[].class)
return true;
else if (clazz == Character[].class)
return true;
else if (clazz == Float[].class)
return true;
else if (clazz == Double[].class)
return true;
else if (clazz == Boolean[].class)
return true;
else
{ // element is an array of object references
return false;
}
}
/**
* 获取包括该类本身但不包含java.lang.Object的所有超类。
*
* @param clazz Class
* @return 超类数组
*/
public static Class<?>[] getAllClass(Class<?> clazz)
{
List<Class<?>> clazzList = new ArrayList<Class<?>>();
getAllSupperClass0(clazzList, clazz);
return clazzList.toArray(new Class<?>[] {});
}
private static void getAllSupperClass0(List<Class<?>> clazzList,
Class<?> clazz)
{
if (clazz.equals(Object.class))
{
return;
}
clazzList.add(clazz);
getAllSupperClass0(clazzList, clazz.getSuperclass());
}
/**
* 获取该类所有实现的接口数组。
*
* @param clazz Class
* @return 该类所有实现的接口数组
*/
public static Class<?>[] getAllInterface(Class<?> clazz)
{
List<Class<?>> clazzList = new ArrayList<Class<?>>();
Class<?>[] interfaces = clazz.getInterfaces();
for (Class<?> interfaceClazz : interfaces)
{
clazzList.add(interfaceClazz);
getAllSupperInterface0(clazzList, interfaceClazz);
}
return clazzList.toArray(new Class<?>[] {});
}
private static void getAllSupperInterface0(List<Class<?>> clazzList,
Class<?> clazz)
{
if (clazz.equals(Object.class))
{
return;
}
Class<?>[] interfaces = clazz.getInterfaces();
for (Class<?> interfaceClazz : interfaces)
{
clazzList.add(interfaceClazz);
getAllSupperInterface0(clazzList, interfaceClazz);
}
}
/**
* 获取包括该类本身以及所有超类(不含java.lang.Object)和实现的接口中定义的属性。
*
* @param clazz Class
* @return 属性数组
*/
public static Field[] getAllField(Class<?> clazz)
{
List<Field> fieldList = new ArrayList<Field>();
Class<?>[] supperClazzs = ClassUtil.getAllClass(clazz);
for (Class<?> aClazz : supperClazzs)
{
ObjectUtil.addAll(fieldList, aClazz.getDeclaredFields());
}
Class<?>[] supperInterfaces = ClassUtil.getAllInterface(clazz);
for (Class<?> aInterface : supperInterfaces)
{
ObjectUtil.addAll(fieldList, aInterface.getDeclaredFields());
}
return fieldList.toArray(new Field[] {});
}
}
分享到:
相关推荐
标题 "Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser" 提示了一个Java运行时错误,这通常意味着在尝试加载或初始化`JRStyledTextParser`类时遇到了问题。`JRStyledTextParser`是...
### Java.util.logging.Logger 使用详解 #### 一、创建Logger对象 在Java中,`java.util.logging.Logger` 是标准的日志框架之一,它提供了基础的日志记录功能。为了使用这一功能,首先需要获得 `java.util.logging...
### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....
Java.util.ConcurrentModificationException 异常问题详解 ConcurrentModificationException 异常是 Java 中一个常见的异常,它发生在 Iterator 遍历集合时,集合同时被修改引起的异常。在 Java 中,集合类如 ...
在Java编程语言中,`java.util.InputMismatchException`是一个常见的运行时异常,它通常发生在尝试从数据源(如控制台、文件或数据库)读取数据时,遇到的数据类型与预期的不匹配。在这个特定的场景中,问题出在主线...
由于第一版有很多问题,比如double和float没有保留小数,每次新建一个bean需要在数据库创建表单 第二版更完整好用,只需要2步,.../daoCreator/Util/ClassUtil.java /daoCreator/Util/DBUtil.java test /test/test.java
这是我在编写struts2中遇到的问题,整理出来,包括截图,希望可以帮到大家
Android util包中的Base64类,在java工程中使用可以
jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss")); ``` 这里,我们创建了一个`DateJsonValueProcessor`实例,并指定了输出日期的格式。这个...
### Java并发工具包 `java.util.concurrent` 知识点详解 #### 一、引言 随着多核处理器的普及和应用程序复杂度的增加,多线程编程成为了现代软件开发不可或缺的一部分。为了简化并发编程的复杂性,Java 5 引入了 `...
### Java.util.TimeZone的世界时区列表解析 #### 一、概述 `java.util.TimeZone` 是Java标准库中的一个类,用于表示不同时区的信息。本文档提供了通过`java.util.TimeZone`类导出的世界范围内时区列表。该列表不仅...
Java.util.Timer类是Java标准库提供的一种简单但功能有限的定时任务执行机制。它允许开发者在指定的时间间隔或特定时间点执行任务,非常适合处理一次性或周期性的后台操作。本篇文章将深入探讨如何使用Timer和...
"JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用" JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用是Java多线程编程中的一种重要概念。随着多线程编程的普及,线程池的使用变得...
org.springframework.web.util.HtmlCharacterEntityReferences.class org.springframework.web.util.HtmlUtils.class org.springframework.web.util.HttpSessionMutexListener.class org.springframework.web.util....
在Java编程语言中,`java.util.zip` 是一个非常重要的包,它提供了处理各种压缩格式(如ZIP和GZ)的工具。在这个场景中,我们将深入探讨如何使用这个包来解压缩和压缩ZIP格式的文件。`java.util.zip` 包包含几个关键...
import java.util.Scanner; public class Test3 { public static void main(String[] args) { System.out.println("请您输入要打印的金字塔的行数: "); Scanner sca=new Scanner(System.in); int nu=sca....
在Java中,Base64编码和解码通常通过`java.util.Base64`类进行操作,该类自Java 8开始引入。这个类提供了多种方法,如`encodeBytes()`用于编码字节数组,`decode()`用于解码Base64字符串。然而,描述中提到的是一个...
`ClassUtil.java`可能是一个工具类,包含了动态编译代码的相关方法。例如,它可能会有如下功能: ```java import javax.tools.*; import java.io.IOException; import java.util.Arrays; public class ClassUtil {...