精华内容
下载资源
问答
  • public class ClassUtil {//获取方法、返回值和参数public void ClassPrintMethodMessage(Object obj){//获取类型Class cls = obj.getClass();System.out.println("类名:"+cls.getName());//获取类型下面...

    public class ClassUtil {

    //获取类的方法、返回值和参数

    public void ClassPrintMethodMessage(Object obj){

    //获取类类型

    Class cls = obj.getClass();

    System.out.println("类名:"+cls.getName());

    //获取类类型下面所有的方法,包含父类继承过来的方法(只包括public)

    Method[] methods = cls.getMethods();

    //获取类类型下面所有的方法,只包含自己内部的方法(包含私有)

    Method[] decMethods = cls.getDeclaredMethods();

    //循环类类型的所有方法

    for(int i = 0;i

    //获取方法的返回值

    Class returnType = methods[i].getReturnType();

    System.out.print(returnType.getName()+" ");

    //方法名称

    System.out.print(methods[i].getName()+" (");

    //获取返回值参数

    Class[] chars = methods[i].getParameterTypes();

    for(Class c:chars){

    System.out.print(c.getName()+",");

    }

    System.out.println(")");

    }

    ClassPrintFieldMessage(obj);

    }

    //获取类的成员变量

    public void ClassPrintFieldMessage(Object obj){

    Class cls = obj.getClass();

    //获取类的成员变量,包含继承的父类成员变量

    // Field[] fie = cls.getFields();

    //获取类的成员变量,不包含继承的父类成员变量

    Field[] dlFie = cls.getDeclaredFields();

    for (Field f:dlFie) {

    //成员变量类型

    String type = f.getType().getName();

    //成员变量名称

    String name = f.getName();

    System.out.println(type+" "+name);

    }

    }

    //获取类的构造函数

    public void ClassPrintConMessage(Object obj){

    //获取类类型

    Class cls = obj.getClass();

    /*

    获取构造函数

    getConstructors 获取所有构造函数

    getDeclaredConstructors 获取所有私有构造函数(构造函数必须为私有)

    */

    // Constructor[] con = cls.getConstructors();

    Constructor[] con = cls.getDeclaredConstructors();

    for (Constructor c:con) {

    System.out.print(c.getName()+"(");

    Class[] cl = c.getParameterTypes();

    for (Class clss:cl) {

    System.out.print(clss.getName()+",");

    }

    System.out.println(")");

    }

    }

    展开全文
  • 转载自 linshutao博客 ... 因为项目需要用到,于是简单封装了一些常用操作: .../** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { 

    转载自

    linshutao博客

    点击打开链接

    因为项目需要用到,于是简单封装了一些常用的操作:

    1. /** 
    2.  * 根据属性名获取属性值 
    3.  * */  
    4.    private Object getFieldValueByName(String fieldName, Object o) {  
    5.        try {    
    6.            String firstLetter = fieldName.substring(01).toUpperCase();    
    7.            String getter = "get" + firstLetter + fieldName.substring(1);    
    8.            Method method = o.getClass().getMethod(getter, new Class[] {});    
    9.            Object value = method.invoke(o, new Object[] {});    
    10.            return value;    
    11.        } catch (Exception e) {    
    12.            log.error(e.getMessage(),e);    
    13.            return null;    
    14.        }    
    15.    }   
    16.      
    17.    /** 
    18.     * 获取属性名数组 
    19.     * */  
    20.    private String[] getFiledName(Object o){  
    21.     Field[] fields=o.getClass().getDeclaredFields();  
    22.         String[] fieldNames=new String[fields.length];  
    23.     for(int i=0;i<fields.length;i++){  
    24.         System.out.println(fields[i].getType());  
    25.         fieldNames[i]=fields[i].getName();  
    26.     }  
    27.     return fieldNames;  
    28.    }  
    29.      
    30.    /** 
    31.     * 获取属性类型(type),属性名(name),属性值(value)的map组成的list 
    32.     * */  
    33.    private List getFiledsInfo(Object o){  
    34.     Field[] fields=o.getClass().getDeclaredFields();  
    35.         String[] fieldNames=new String[fields.length];  
    36.         List list = new ArrayList();  
    37.         Map infoMap=null;  
    38.     for(int i=0;i<fields.length;i++){  
    39.         infoMap = new HashMap();  
    40.         infoMap.put("type", fields[i].getType().toString());  
    41.         infoMap.put("name", fields[i].getName());  
    42.         infoMap.put("value", getFieldValueByName(fields[i].getName(), o));  
    43.         list.add(infoMap);  
    44.     }  
    45.     return list;  
    46.    }  
    47.      
    48.    /** 
    49.     * 获取对象的所有属性值,返回一个对象数组 
    50.     * */  
    51.    public Object[] getFiledValues(Object o){  
    52.     String[] fieldNames=this.getFiledName(o);  
    53.     Object[] value=new Object[fieldNames.length];  
    54.     for(int i=0;i<fieldNames.length;i++){  
    55.         value[i]=this.getFieldValueByName(fieldNames[i], o);  
    56.     }  
    57.     return value;  
    58.    }      
    	/**
    	 * 根据属性名获取属性值
    	 * */
        private Object getFieldValueByName(String fieldName, Object o) {
            try {  
                String firstLetter = fieldName.substring(0, 1).toUpperCase();  
                String getter = "get" + firstLetter + fieldName.substring(1);  
                Method method = o.getClass().getMethod(getter, new Class[] {});  
                Object value = method.invoke(o, new Object[] {});  
                return value;  
            } catch (Exception e) {  
                log.error(e.getMessage(),e);  
                return null;  
            }  
        } 
        
        /**
         * 获取属性名数组
         * */
        private String[] getFiledName(Object o){
        	Field[] fields=o.getClass().getDeclaredFields();
           	String[] fieldNames=new String[fields.length];
        	for(int i=0;i<fields.length;i++){
        		System.out.println(fields[i].getType());
        		fieldNames[i]=fields[i].getName();
        	}
        	return fieldNames;
        }
        
        /**
         * 获取属性类型(type),属性名(name),属性值(value)的map组成的list
         * */
        private List getFiledsInfo(Object o){
        	Field[] fields=o.getClass().getDeclaredFields();
           	String[] fieldNames=new String[fields.length];
           	List list = new ArrayList();
           	Map infoMap=null;
        	for(int i=0;i<fields.length;i++){
        		infoMap = new HashMap();
        		infoMap.put("type", fields[i].getType().toString());
        		infoMap.put("name", fields[i].getName());
        		infoMap.put("value", getFieldValueByName(fields[i].getName(), o));
        		list.add(infoMap);
        	}
        	return list;
        }
        
        /**
         * 获取对象的所有属性值,返回一个对象数组
         * */
        public Object[] getFiledValues(Object o){
        	String[] fieldNames=this.getFiledName(o);
        	Object[] value=new Object[fieldNames.length];
        	for(int i=0;i<fieldNames.length;i++){
        		value[i]=this.getFieldValueByName(fieldNames[i], o);
        	}
        	return value;
        }	
    


    展开全文
  • Java获取Object属性值

    千次阅读 2017-08-23 11:41:00
    Java获取Object属性值 做了一个拦截参数需求,需要获取普通参数和对象参数 参数是Object类型,Object[] paramValues = pjp.getArgs(); 1.获取普通参数 for(int i=0;i<paramValues.length;...

    Java获取Object属性值

    做了一个拦截参数的需求,需要获取普通参数和对象参数

    参数是Object类型,Object[] paramValues = pjp.getArgs();

    1.获取普通参数

    for(int i=0;i<paramValues.length;i++){
                accessToken = paramValues[i].toString();
            }

     

    2.获取对象型参数

    for(int i=0;i<paramValues.length;i++){
                 accessToken =  paramValues[i].getClass().getDeclaredField("key").get(paramValues[i]).toString();
            }

     

    posted @ 2017-08-23 11:41 Rest探路者 阅读(...) 评论(...) 编辑 收藏
    展开全文
  • Java泛型是伪泛型,会在编译完成时进行类型的擦除,我们无法在运行时获取泛型参数具体类型(类型擦除会被替换成泛型限定类型,若没有限定则被替换成Object)。泛型类型擦除到底都擦除了哪些信息,是全部擦除吗?...

    Java泛型是伪泛型,会在编译完成时进行类型的擦除,我们无法在运行时获取泛型参数的具体类型(类型擦除会被替换成泛型的限定类型,若没有限定则被替换成Object)。

    泛型类型擦除到底都擦除了哪些信息,是全部擦除吗?

    其实java虚拟机规范中为了响应在泛型类中如何获取传入的参数化类型等问题,引入了signature,LocalVariableTypeTable等新的属性来记录泛型信息,所以所谓的泛型类型擦除,仅仅是对方法的code属性中的字节码进行擦除,而元数据中还是保留了泛型信息的,这些信息被保存在class字节码的常量池中,使用了泛型的代码调用处会生成一个signature签名字段,signature指明了这个常量在常量池的地址,这样我们就就可以获取泛型的类型信息了。

    1、方法中Code属性

    Java程序方法体中的代码经过Javac编译器处理后,最终变为字节码指令存储在Code属性内。

    public static void main(String[] args) {

    Map map = new HashMap<>();

    map.put("hello", "world");

    map.put("你好", "世界");

    System.out.println(map.get("hello"));

    }

    我们使用反编译工具对源码的Class文件反编译之后,可以看到,泛型都变成了原生类型。即方法内部参数和方法实参被擦除!

    class文件反编译(Class文件):

    public static void main(String[] args)

    {

    Map map = new HashMap();

    map.put("hello", "world");

    map.put("你好", "世界");

    System.out.println((String)map.get("hello"));

    }

    2、元数据

    类结构相关的信息(属性,类,接口,方法签名)即元数据。

    源码:

    public class Test {

    private T data;

    private Set set = new HashSet<>();

    public boolean isBoolean(Test data) {

    Map map = new HashMap<>();

    map.put("hello", "world");

    map.put("你好", "世界");

    System.out.println(map.get("hello"));

    return true;

    }

    //查看反编译文件

    public static void main(String[] args) {

    Test test=new Test<>();

    }

    }

    源码反编译(Class文件):

    public class Test

    {

    private T data;

    private Set set;

    public Test()

    {

    this.set = new HashSet(); }

    public boolean isBoolean(Test data) {

    Map map = new HashMap();

    map.put("hello", "world");

    map.put("你好", "世界");

    System.out.println((String)map.get("hello"));

    return true;

    }

    public static void main(String[] args)

    {

    Test test = new Test();

    }

    }

    类及其字段和方法的类型参数相关的元数据都会被保留下来,可以通过反射获取到。

    下面看下如何通过反射来获取泛型的实体化类型。

    3、获取泛型实参的类型

    3.1、继承一个泛型类

    public class Parent {

    }

    public class Child extends Parent {

    }

    public void getRuntime() {

    Child child = new Child();

    ParameterizedType parameterizedType = (ParameterizedType) child.getClass().getGenericSuperclass();

    System.out.println(Arrays.toString(parameterizedType.getActualTypeArguments()));

    }

    输出

    [class java.lang.String]

    3.2、实现一个泛型接口

    public interface A {

    }

    public class B implements A {

    }

    public void getRuntime() {

    B b = new B();

    ParameterizedType parameterizedType = (ParameterizedType) (b.getClass().getGenericInterfaces()[0]);

    System.out.println(Arrays.toString(parameterizedType.getActualTypeArguments()));

    }

    输出

    [class java.lang.String]

    3.3、匿名内部类的形式获取

    针对上面的泛型类Parent和泛型接口A,分别创建匿名内部类。

    public void getRuntime() {

    A a = new A() {

    };

    Parent parent = new Parent() {

    };

    ParameterizedType aType = (ParameterizedType) a.getClass().getGenericInterfaces()[0];

    System.out.println(Arrays.toString(aType.getActualTypeArguments()));

    ParameterizedType parentType = (ParameterizedType) parent.getClass().getGenericSuperclass();

    System.out.println(Arrays.toString(parentType.getActualTypeArguments()));

    }

    }

    输出

    [class java.lang.String]

    [class java.lang.Integer]

    展开全文
  • 为了获取Java中的Array Object的组件类型,我们使用getComponentType()方法。getComponentType()方法返回表示数组的组件类型的Class。如果该类不是数组类,则此方法返回null。声明-java.lang.Class.getComponentType...
  • JavaObject转Map类型,Map转Object类型

    千次阅读 2020-07-31 09:40:11
    在使用Java编程过程中,经常会遇到获取的数据为Object类型,但只是以这种方式传输,实质还是Map类型,此时就涉及到两种类型的相互转换。 强制转换 在类型转换工程中,常见转换方式为强制转换。如(String)map.get...
  • 在struts1action类中设置了String类型的变量,int类型的变量,把他们放在request中,在jsp页面获取的时候object类型装换位int类型,(Integer)request.getAttribute("")没错,但是同样方式转换String类型的变量...
  • 我想用Object接受参数,然后在方法里反射获得传进来具体类型,怎麼操作?
  • Java获取变量的类型

    2021-04-19 20:56:33
    public static void main(String[] args) { int i=1; System.out.println(getType(i)); } public static String getType(Object o) { return o.getClass().toString(); } 参考
  • 如上图,有一个Object数组,数组中每个object又是一个个key-value类型,想要获取key对应value值,尝试了下强转,一直报错。然后尝试了下如下思路(通过反射),成功解决了我问题。 /** * 单个对象某个...
  • 作用:在框架中完成一些通用型比较高代码ResultSetMetaData(结果集元数据):getColumnCount:获取结果集中列项目个数getColumnType:获取指定列SQL类型对应于Java中Types类字段getColumnTypeName:获取指定...
  • // java 获取对象数据类型 public static String getType(Object object){ String typeName=object.getClass().getName(); // System.out.println("typeName-------" +typeName); // ...
  • Java获取泛型类实际类型的实例

    千次阅读 2019-09-20 06:29:54
    文章目录泛型速解强类型共用性继承泛型...如果不通过尖括号指定类型,容器中可以添加任何类型的元素,因为在Java中所有对象类型都继承自Object父类,但Java是强类型语言,限定容器内元素具体类型是推荐方式。...
  • java Object类型的参数

    千次阅读 2017-08-26 07:59:21
    通常提供API函数时候,会实现多种参数类型,比如:log4j里面获取log对象,可以传string,当然也可以更方便传class进去自动转string [java] view plain copy print?public static Logger getLogger(String ...
  • 其中基本数据类型包括 Undefined、Null、Boolean、Number、String、Symbol (ES6 新增,表示独一无二值),而引用数据类型统称为 Object 对象,主要包括对象、数组和函数。接下来我们分别看下两者特点。基本数...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼/*** 根据属性名获取属性值* */private Object getFieldValueByName(String fieldName, Object o) {try {String firstLetter = fieldName.substring(0, 1).toUpperCase()...
  • JavaObject转换为List类型

    万次阅读 2020-05-19 15:57:33
    解析数据的时候map.get(key)所获取的类型Object。此时,需要转换成我们所需要的数据类型进行使用。 类型转换 在类型转换工程中,常见的转换方式为强制转换。如(String)map.get(key),(int)map.get(key)等。在是...
  • 今天跟大家分享JAVA高级之反射知识。一、什么是反射反射就是把Java类中各个成分映射成一...这种动态获取信息及动态调用对象方法功能叫Java的反射机制。 1. 反射机制功能 Java反射机制主要提供了以下功能:...
  • 前言 最近操作数据库,会获取到BigDecimal类型的数据,但是通过mybatis拿到的数据或者从数据总线拿到的数据一般都以...常见的类型有:BigDecimal,String,BigInteger,Number; 工具类编写如下 源码 package action;
  • Java从mysql中取出blob时,是二进制形式,最好先转换成byte[],然后转换成String: String json = new String((byte[])(projectDetailMap.get("cost")), StandardCharsets.UTF_8); YourObject yourObject = gson....
  • 这种动态获取信息以及动态调用对象方法功能来自于java语言反射(reflection)机制。2.java反射机制主要提供以下四个功能:a)在运行时判断任意一个对象所属类;b)在运行时构造任意一个类对象;c)在...
  • Java object类型转换为int类型

    千次阅读 2015-08-11 10:41:35
    在struts1action类中设置了String类型的变量,int类型的变量,把他们放在request中,在jsp页面获取的时候object类型装换位int类型,(Integer)request.getAttribute("")没错,但是同样方式转换String类型的变量...
  • Java获取泛型参数的类型的方法

    千次阅读 2018-05-29 14:29:16
    由于Java泛型的实现机制,使用了泛型的代码在运行期间相关的泛型参数的类型会被擦除,我们无法在运行期间获知泛型参数的具体类型(所有的泛型类型在运行时都是Object类型)。 但是有的时候,我们确实需要获知泛型...
  • Java的获取类型方法

    千次阅读 2019-03-18 22:17:31
    /** * * 获取类型方法 * */ public class Change { ... public static String getType(Object o){ //获取变量类型方法 return o.getClass().toString(); //使用Object类型的getClass()方法...
  • /*** 根据属性名获取属性值* */private Object getFieldValueByName(String fieldName, Object o) {try {String firstLetter = fieldName.substring(0, 1).toUpperCase();String getter = "get" + firstLetter + ...
  • 因为项目需要用到,于是简单封装了一些常用操作:/*** 根据属性名获取属性值* */private Object getFieldValueByName(String fieldName, Object o) {try {String firstLetter = fieldName.substring(0, 1)....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,622
精华内容 648
关键字:

java获取object的类型

java 订阅