java 如何获取基本类的class

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 如何获取基本类的class相关的知识,希望对你有一定的参考价值。

int i = 0;
现在要得到 Integer.Type(注意,不是Intger.class ) 不要使用大量的if语句,能支持所有的基本类型.
希望能给出代码.谢谢
问的比较模糊,实际情况:
public class Test<T>
T obj;
public void setMethod(T obj)
public static void main(String[] args)
Signature sig = new Signature("setMethod", Type.VOID_TYPE,
new Type[] 这里不知道);
MethodProxy proxyM = MethodProxy.find(xxx, sig);


这是cglib加包. 问题如下:
有很多个Test实例,被一个数据控制,其中一个Test的数据改变.引起其他所有Test的数据的同步.这些Test的方法名和参数种类是不确定的
现在我使用cglib可以取得一任何一个Test实例的setMethod的调用.但是我代理的所有Test实例的set方法.我就需要取得他们的MethodProxy来调用invokeSuper. 如何取得MethodProxy.
妈蛋字数不够.

  public static Object getType(Class c) throws Exception
      Field f = c.getDeclaredField("TYPE");
      Object obj = f.get(c);
      return obj;
  
  public static void main(String[] args) throws Exception 
      System.out.println(getType(Integer.class));
  
参考技术A     int.class

参考技术B 用反射试试看, 参考技术C 你是想得到一个数据,但不知道它的数据类型...

Java中9大内置基本数据类型Class实例和数组的Class实例

1、Java中9大内置几本数据类型:
对于对象来说,可以直接使用对象.getClass()或者Class.forName(className);类名.class都可以获取Class实例.
但是我们的基本数据类型,就没有类的权限定名,也没有getClass方法.
问题:那么如何使用Class类来表示基本数据类型的Class实例?
byte,short,int,long,char,float,double,boolean,void关键字
上述8种类型和void关键字,都有class属性.
表示int的Class对象: Class clz = int.class;
表示boolean的Class对象: Class clz = boolean.class;
表示void的Class对象:Class clz = void.class;
所有的数据类型都有class属性,表示都是Class对象.
思考:
int的包装类是Integer
Integer.class ==?== int.class 相等吗????
结果是false,说明是两份字节码.

Integer 和int是同一种数据类型吗? 不是

但是在八大基本数据类型的包装类中都有一个常量:TYPE,
TYPE表示的是该包装类对应的基本数据类型的Class实例.
如:<pre><code>
Integer.TYPE----->int.class

Integer.TYPE==int.class;//YES

Integer.TYPE == Integer.class;//ERROR</pre></code>
摘自jdk源码:基本数据类型包装类TYPE的实现。

 /** The @code Class instance representing the primitive type
 * @code int.
 *
 * @since   JDK1.1
 */
public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");

 /** Return the Virtual Machine‘s Class object for the named
 * primitive type.
 */
static native Class getPrimitiveClass(String name);

2、数组类型的Class实例
每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象(摘自JDK原话)。
数组的Class实例:
String[] sArr1 ="A","C";
String[] sArr2 = ;
String[][] sArr = ;
int[] sArr = ;
表示数组的Class实例:
String[] sArr1 = "A","C";
Class clz = String[].class;//此时clz表示就是一个String类型的一位数组类型

所有具有相同元素类型和维数的数组才共享同一份字节码(Class对象);
注意:和数组中的元素没有一点关系.

eg:<pre><code>
public static void main(String[] args)

    String[] s1 = ;
    String[] s2 = "A";
    String[] s3 = "A","b";
    int[] i =;    
    System.out.println(s1.getClass() == s2.getClass());//true
    System.out.println(s1.getClass() == s3.getClass());//true
    System.out.println(s2.getClass() == s3.getClass());//true
    
    String[][] s4 = "1","2";
    Class zz = s4.getClass();
    System.out.println(s2.getClass() == zz);//false
    Class zz1 = i.getClass();
    System.out.println(s2.getClass() == zz1);//false    

</pre></code>

原文地址:https://blog.csdn.net/spy19881201/article/details/23995267

以上是关于java 如何获取基本类的class的主要内容,如果未能解决你的问题,请参考以下文章

java如何获取类上的注解

Java讲课笔记36:初探反射机制

如何在Java中获取给定类的数组类?

如何获取Class类的实例

如何获取Class类的实例

如何在运行时获取泛型的类型