java如何通过类型名得到具体的类型

java如何通过类型名得到具体的类型,第1张

只需要得到类型

Class a=ClassforName("String");

Class b=ClassforName("Date");

如果还需要根据得到的类型强制转换的话jdk15之前的版本不支持,15以后可以使用泛型

很多朋友都想知道java怎么获取泛型class?下面就一起来了解一下吧~

获取泛型Class的方法

Class类的方法:

public Type getGenericSuperclass()

方法作用:

如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType 声明。如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。

ParameterizedType类的方法:

Type[] getActualTypeArguments()

方法作用:返回表示此类型实际类型参数的 Type 对象的数组。

注意,在某些情况下,返回的数组为空。如果此类型表示嵌套在参数化类型中的非参数化类型,则会发生这种情况。

二、获取泛型Class对象

(解析Excel的类代码较多,这里定义几个简单的类记录)

定义获取泛型Class对象的工具类

GenericSuperclassUtil

import javalangreflectParameterizedType; import javalangreflectType; public class GenericSuperclassUtil { /  获取泛型类Class对象,不是泛型类则返回null / public static Class  getActualTypeArgument(Class  clazz) { Class  entitiClass = null; Type genericSuperclass = clazzgetGenericSuperclass(); if (genericSuperclass instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass) getActualTypeArguments(); if (actualTypeArguments != null && actualTypeArgumentslength > 0) { entitiClass = (Class ) actualTypeArguments[0]; } } return entitiClass; } }

定义BaseService ,用来测试不使用父类时泛型Class的获取

BaseService

public class BaseService  { public Class  getEntityClass() { return GenericSuperclassUtilgetActualTypeArgument(thisgetClass()); } }

测试BaseServicegetEntityClass() @Testpublic void testBaseService() { Systemoutprintln(new BaseService ()getEntityClass());// 控制台输出:null }

主要以下几种方法:

这个MimetypesFileMap类会映射出一个file的Mime Type,这些Mime Type类型是在activationjar包里面的资源文件中定义的

import javaxactivationMimetypesFileTypeMap;  

import javaioFile;  

  

class GetMimeType {  

  public static void main(String args[]) {  

    File f = new File("testgif");  

    Systemoutprintln("Mime Type of " + fgetName() + " is " +  

                         new MimetypesFileTypeMap()getContentType(f));  

    // expected output :  

    // "Mime Type of testgif is image/gif"  

  }  

}

使用 javanetURL 

警告:这个方法非常慢 

与上面所说的匹配后缀名类似。后缀名和mime-type的映射关系被定义在[jre_home]\lib\content-typesproperties这个文件中

import javanet;  

  

public class FileUtils{  

  public static String getMimeType(String fileUrl)  

    throws javaioIOException, MalformedURLException  

  {  

    String type = null;  

    URL u = new URL(fileUrl);  

    URLConnection uc = null;  

    uc = uopenConnection();  

    type = ucgetContentType();  

    return type;  

  }  

  

  public static void main(String args[]) throws Exception {  

    Systemoutprintln(FileUtilsgetMimeType("file://c:/temp/testTXT"));  

    // output :  text/plain  

  }  

}

还有一种方式:就是取文件名最后一个“”后的内容,通过人来判断如

String fileName = "aaatxt";

String fileType =“txt”//通过方法取出方法类型为

String type = "";

if( fileTyepequals("txt")){

type  = "记事本";

}else if(fileTyepequals("img")){

type  = "img";

}。。。。。

Java中要用到反射,首先就必须要获取到对应的class对象,在Java中有三种方法获取类对应的class对象。 1、通过类的class属性 2、通过类实例的getClass()方法获取

以上就是关于java如何通过类型名得到具体的类型全部的内容,包括:java如何通过类型名得到具体的类型、java获取泛型class、用Java实现获取文件类型的方法。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9530446.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存