1. java 如何获取基本类的class
publicstaticObjectgetType(Classc)throwsException{
Fieldf=c.getDeclaredField("TYPE");
Objectobj=f.get(c);
returnobj;
}
publicstaticvoidmain(String[]args)throwsException{
System.out.println(getType(Integer.class));
}
2. java class
java class是什么,让我们一起了解一下?
CLASS是在网络工程中的一种协议,在java中有两种对象:实例对象和Class对象。每个类运行时的类型信息就是用Class对象表示的,它包含了与类有关的信息,其实实例对象就是通过Class对象来创建的。
那我们如何获得Class对象?
1、Class.forName(“类的全限定名”)
2、实例对象.getClass()
3、类名.class (类字面常量)
实战操作:如何获得一个实例的类型类?
Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类耐滑型类来表示一个类型,所有的类型类都是Class类的实例。getClass()会看到返回Class 。
JDK中,普通的Class.newInstance()方法的定义返回Object,要将该返回类型强制转换为另一种类型,但是使用泛型的Class ,Class.newInstance()方法具有一个特定的返回类型。
代码如下: public class Main2 { public static void main(String[] args) throws InstantiationException, IllegalAccessException { System.out.println("1-----------"); Dog dog1 = creatNew1(Dog.class); System.out.println(dog1.name + " is " + dog1.type+ "\n"); System.out.println("2-----------"); Animal ani1 = creatNew2(Cat.class); Cat cat1 = (Cat) ani1; System.out.println(cat1.name + " is " + cat1.type + "\n"); System.out.println("3-----------"); Object obj = creatNew3(Dog.class); Dog dog2 = (Dog) obj; System.out.println(dog1.name + " is " + dog2.type + "\n"); System.out.println("4-----------"); Object obj2 = creatNew4(Cat.class); Cat cat2 = (Cat) obj2; System.out.println(cat2.name + " is " + cat2.type + "\n"); System.out.println("5-----------"); Object obj3 = creatNew5(new Cat()); Cat cat3 = (Cat) obj3; 蔽亩码 System.out.println(cat3.name + " is 宏哪" + cat3.type + "\n"); } /** * 此方法是一个非泛型类中的泛型方法,参数为Class 类型,可以传入任何类,但是Class 将参数在函数内部的类型固定为 T类,使用clazz.newInstance(),返回的类型也为固定的 T 类型。 * 如: 传入Dog.class, 函数中的 T 固定为Dog.class,函数返回的是Dog类型,不需要强制转换为Dog类型 * (当然,函数返回类型也可以是Object类型,但是没必要) */ public static T creatNew1(Class clazz) throws IllegalAccessException, InstantiationException { System.out.println(clazz);//打印具体传入的类型。 return clazz.newInstance(); } /** * 此方法参数是Class ,只能传入Animal及其子类的类型,函数返回类型只能声明为Animal或Object类型, * 如:传入Cat.class,函数返回一个Animal的子类对象,需将此子类对象强制转换为具体的子类(即Cat类)。 */ public static Animal creatNew2(Class clazz) throws IllegalAccessException, InstantiationException { System.out.println(clazz);//打印具体传入的类型。 return clazz.newInstance(); } /** * 此方法参数是Class,可传入任何类,其返回只能声明为Object类对象。 * 如:传入Dog.class, 返回的是Object类型的对象,需强制转换为Dog类型的对象。 */ public static Object creatNew3(Class clazz) throws IllegalAccessException, InstantiationException { System.out.println(clazz);//打印具体传入的类型。 return clazz.newInstance(); } /** * 传入参数Class 和 上一个方法传入 Class 的区别还不是很清楚,其返回只能声明为Object类对象。 * 如:Cat.class, 返回的是Object类型的对象,需强制转换为Cat类型的对象。 */ public static Object creatNew4(Class clazz) throws IllegalAccessException, InstantiationException { System.out.println(clazz);//打印具体传入的类型。 return clazz.newInstance(); } /** * 传入Object类型的对象,返回也声明为Object类型。 */ public static Object creatNew5(Object object) { System.out.println(object.getClass());//打印具体传入的类型。 return object; } } abstract class Animal { public String type = "type = animal "; } class Dog extends Animal { public String name = "name = gou"; } class Cat extends Animal { public String name = "name = mao"; } /** * 这些方法,传的参数声明不同,其返回的声明也必然要随之不同。 */
3. java 如何获取 泛型的 class
package com.leo.common;
public class Genericity<T> {
public static void main(String[] args) {
Genericity<String> test = new Genericity<>("test1");
System.out.println(test.getGenericityName());
Genericity<Double> test1 = new Genericity<>(new Double(123));
System.out.println(test1.getGenericityName());
}
private T data;
public Genericity(T data) {
this.data = data;
}
public T getData() {
return this.data;
}
public String getGenericityName() {
return data.getClass().getName();
}
}
4. java web怎么获取class类的编译路径
javaweb中的java文件会在服务器中生成class文件,比如tomcat目录下的webapps目录下,放你的javaweb项目,在项目中有个WEB-INF目录,里面有一个classes文件夹,里面放的都是对源码进行编译后生成的.class文件
5. java中如何得到一个数组的class的元素class
1、在Java中,所有的数组都有一个缺省的属性length,用于获取数组中元素的个数。
2、数组的复制:System.array()。浅拷贝
3、数组的排序:Arrays.sort()。
4、在已排序的数组中查找某个元素:Arrays.binarySearch()。
5、获取Class的三种方式:
(1)利用对象调用getClass()方法获取该对象的Class实例;
(2)使用Class类的静态方法forName(),用类的名字获取一个Class实例;
(3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例。
6. java获取泛型class
很多朋友都想知道java怎么获取泛型class?下面侍袭就一起来了解一下吧~
获取泛型Class的方法
Class类的方法:
public Type getGenericSuperclass()
方法作用:
如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化老做兄类型创建过程的语义,请参阅 ParameterizedType 声明胡好。如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。
ParameterizedType类的方法:
Type[] getActualTypeArguments()
方法作用:返回表示此类型实际类型参数的 Type 对象的数组。
注意,在某些情况下,返回的数组为空。如果此类型表示嵌套在参数化类型中的非参数化类型,则会发生这种情况。
二、获取泛型Class对象
(解析Excel的类代码较多,这里定义几个简单的类记录)
定义获取泛型Class对象的工具类
GenericSuperclassUtil
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class GenericSuperclassUtil { /* * 获取泛型类Class对象,不是泛型类则返回null */ public static Class getActualTypeArgument(Class clazz) { Class entitiClass = null; Type genericSuperclass = clazz.getGenericSuperclass(); if (genericSuperclass instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass) .getActualTypeArguments(); if (actualTypeArguments != null && actualTypeArguments.length > 0) { entitiClass = (Class ) actualTypeArguments[0]; } } return entitiClass; } }
定义BaseService ,用来测试不使用父类时泛型Class的获取
BaseService
public class BaseService { public Class getEntityClass() { return GenericSuperclassUtil.getActualTypeArgument(this.getClass()); } }
测试BaseService.getEntityClass() @Testpublic void testBaseService() { System.out.println(new BaseService ().getEntityClass());// 控制台输出:null }
7. java 怎么获取t的class
1. public Type getGenericSuperclass()
用来返回表示当前Class 所表示的实体(类、接口、基本类型或 void)的直接超类的Type。如果这个直接超类是参数化类型的,则返回的Type对象必须明确反映在源代码中声明时使用的类型。比如:
import java.lang.reflect.ParameterizedType;
public class GT1 extends GT2<Integer>{
public static void main(String[] args) {
System.out.println(((ParameterizedType)new GT1().getClass().getGenericSuperclass()));
}
}
则输出结果即为:
GT2<java.lang.Integer>
如果此Class代表的是Object 类、接口、基本类型或 void,则返回 null。。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。
2. public Type[] getGenericInterfaces()
与上面那个方法类似,只不过Java的类可以实现多个接口,所以返回的Type必须用数组来存储。
以上两个方法返回的都是Type对象或数组,在我们的这个话题中,Class都是代表的参数化类型,因此可以将Type对象Cast成ParameterizedType对象。而 ParameterizedType对象有一个方法, getActualTypeArguments()。
public Type[] getActualTypeArguments()
用来返回一个Type对象数组,这个数组代表着这个Type声明中实际使用的类型。接着使用上面的例子:
import java.lang.reflect.ParameterizedType;
public class GT1 extends GT2<Integer>{
public static void main(String[] args) {
System.out.println(((ParameterizedType)new GT1().getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
}
8. Java 获取包所有class
既然是封到包里的,遍历确实是有点麻烦
思路如下:
输入包名
转换为资源路径名,即以‘/’替换‘.’
找到ClassLoader,并获得资源名对于的资源对象
判断资源对象是否为jar包内
4.1若否,则使用文件系统进行处理为文件夹,之后遍历名称进行类加载。这里直接使用资源路径名,会是其真实位置,不用关注因部署在tomcat上而产生的路径变化。
4.2若是,则构造一个jar文件类,使用jar操作类遍历内容,进行类加载。
实现参考(其实我只是把它的思路总结出来):http://guoliangqi.iteye.com/blog/644876