`
xiaocao000
  • 浏览: 227142 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

ClassUtil.java

阅读更多

/*
 * 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

    标题 "Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser" 提示了一个Java运行时错误,这通常意味着在尝试加载或初始化`JRStyledTextParser`类时遇到了问题。`JRStyledTextParser`是...

    java.util.logging.Logger使用详解

    ### Java.util.logging.Logger 使用详解 #### 一、创建Logger对象 在Java中,`java.util.logging.Logger` 是标准的日志框架之一,它提供了基础的日志记录功能。为了使用这一功能,首先需要获得 `java.util.logging...

    用java.util.zip包现数据压缩与解压

    ### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....

    java.util.ConcurrentModificationException 异常问题详解1

    Java.util.ConcurrentModificationException 异常问题详解 ConcurrentModificationException 异常是 Java 中一个常见的异常,它发生在 Iterator 遍历集合时,集合同时被修改引起的异常。在 Java 中,集合类如 ...

    Exception in thread “main“ java.util.InputMismatchException.pdf

    在Java编程语言中,`java.util.InputMismatchException`是一个常见的运行时异常,它通常发生在尝试从数据源(如控制台、文件或数据库)读取数据时,遇到的数据类型与预期的不匹配。在这个特定的场景中,问题出在主线...

    简单DAO自动生成器、创建器(支持MySQL)Java版 第二版

    由于第一版有很多问题,比如double和float没有保留小数,每次新建一个bean需要在数据库创建表单 第二版更完整好用,只需要2步,.../daoCreator/Util/ClassUtil.java /daoCreator/Util/DBUtil.java test /test/test.java

    无法解析类型 java.util.Map$Entry。从必需的 .class 文件间接引用了它

    这是我在编写struts2中遇到的问题,整理出来,包括截图,希望可以帮到大家

    android.util.Base64类

    Android util包中的Base64类,在java工程中使用可以

    java.util.Date到Json日期

    jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss")); ``` 这里,我们创建了一个`DateJsonValueProcessor`实例,并指定了输出日期的格式。这个...

    java并发工具包 java.util.concurrent中文版pdf

    ### Java并发工具包 `java.util.concurrent` 知识点详解 #### 一、引言 随着多核处理器的普及和应用程序复杂度的增加,多线程编程成为了现代软件开发不可或缺的一部分。为了简化并发编程的复杂性,Java 5 引入了 `...

    java.util.TimeZone 的世界时区列表

    ### Java.util.TimeZone的世界时区列表解析 #### 一、概述 `java.util.TimeZone` 是Java标准库中的一个类,用于表示不同时区的信息。本文档提供了通过`java.util.TimeZone`类导出的世界范围内时区列表。该列表不仅...

    java.util.timer实现的简单定时任务

    Java.util.Timer类是Java标准库提供的一种简单但功能有限的定时任务执行机制。它允许开发者在指定的时间间隔或特定时间点执行任务,非常适合处理一次性或周期性的后台操作。本篇文章将深入探讨如何使用Timer和...

    JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用

    "JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用" JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用是Java多线程编程中的一种重要概念。随着多线程编程的普及,线程池的使用变得...

    spring-web-2.5.jar

    org.springframework.web.util.HtmlCharacterEntityReferences.class org.springframework.web.util.HtmlUtils.class org.springframework.web.util.HttpSessionMutexListener.class org.springframework.web.util....

    java.util.zip 解压缩文件,ZIP格式压缩文件.rar

    在Java编程语言中,`java.util.zip` 是一个非常重要的包,它提供了处理各种压缩格式(如ZIP和GZ)的工具。在这个场景中,我们将深入探讨如何使用这个包来解压缩和压缩ZIP格式的文件。`java.util.zip` 包包含几个关键...

    金字塔import java.util.Scanner;public class Test3 {

    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源码+jar包

    在Java中,Base64编码和解码通常通过`java.util.Base64`类进行操作,该类自Java 8开始引入。这个类提供了多种方法,如`encodeBytes()`用于编码字节数组,`decode()`用于解码Base64字符串。然而,描述中提到的是一个...

    Java语言-动态编译代码并热加载类

    `ClassUtil.java`可能是一个工具类,包含了动态编译代码的相关方法。例如,它可能会有如下功能: ```java import javax.tools.*; import java.io.IOException; import java.util.Arrays; public class ClassUtil {...

Global site tag (gtag.js) - Google Analytics