Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串className获取可丢弃的类对象_Java - Fatal编程技术网

Java 从字符串className获取可丢弃的类对象

Java 从字符串className获取可丢弃的类对象,java,Java,给定一个类似于com.abc.XYZException的字符串,我希望得到一个可以从类路径解析的可丢弃类,并将该字符串作为类名 private Class<? extends Throwable> getExceptionClass(String className){ return Class.forName(className); } private Class但是Class正如注释中所建议的(未选中返回类的强制转换),这应该是您需要的,以便编译它: private C

给定一个类似于
com.abc.XYZException
的字符串,我希望得到一个可以从类路径解析的可丢弃类,并将该字符串作为类名

private Class<? extends Throwable> getExceptionClass(String className){
    return Class.forName(className);
}

private Class
但是
Class正如注释中所建议的(未选中返回类的强制转换),这应该是您需要的,以便编译它:

private Class<? extends Throwable> getExceptionClass(String className) throws ClassNotFoundException {
    return (Class<? extends Throwable>) Class.forName(className);
}

private Class这应该可以做到

private Class<? extends Throwable> getExceptionClass(String className) throws ClassNotFoundException{
    return (Class<? extends Throwable>) Class.forName(className);
    }

private Class未经检查的强制转换是不可避免的,但是在强制转换之前检查输入是否一致,可以更安全地执行操作。
您确实可以使用
Class
isAssignableFrom()
方法来检查加载的
Class
实例是否是
Throwable
类的子类

  public Class<? extends Throwable> getExceptionClass(String className) {
    try {
        Class<?> clazz = Class.forName(className);
        if (!Throwable.class.isAssignableFrom(clazz)) {
            throw new IllegalArgumentException("error in the provided classname");
        }
        return (Class<? extends Throwable>) clazz;
    } catch (ClassNotFoundException e) {
        // handling the exception
    }
  }
public Class clazz=Class.forName(className);
如果(!Throwable.class.isAssignableFrom(clazz)){
抛出新的IllegalArgumentException(“提供的类名中有错误”);
}

return(Class或不带Class cast)您可以使用以下命令使其返回任何类类型:

私有类getExceptionClass(字符串className)抛出ClassNotFoundException{
返回Class.forName(className);
}
Class.forName()
加载任何类,无论它是否扩展了
Throwable
。因此,您无法真正使其在编译时安全(使用反射API时的标准问题)。您应该能够进行未经检查的强制转换,这将解决编译问题,但如果
xyzeException
不是
Throwable
,您将在运行时获得异常。强制转换:
返回(类
   private Class<?> getExceptionClass(String className) throws ClassNotFoundException{
            return Class.forName(className);    
   }