0 0

class.forName() 问题5

我在main方法里面写了个方法:
public static void main(String[] args) {
def authPath = Class.forName('com.emag.wabao.auth.ProvinceAuth').newInstance()
    }
这个是可以正确执行的,输出的结果也对,但是我在项目里面用相同的方法:
for (WabaoBaseAuth auth in authList) {
def clazz = auth.clazz  // clazz 的值为:com.emag.wabao.auth.ProvinceAuth
def authCla = Class.forName(clazz).newInstance()
}
这样就会报classNotFound错误
请大家指教

问题补充:这个我是用grails语言开发的,和java类似的语言

问题补充:错误代码是:
Caused by: java.lang.ClassNotFoundException: com.emag.wabao.auth.ProvinceAuth
at org.codehaus.groovy.tools.RootLoader.findClass(RootLoader.java:156)
at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
at org.codehaus.groovy.tools.RootLoader.loadClass(RootLoader.java:128)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
at java.lang.Class.forName(Class.java:169)
at com.emag.gamecms.service.wabao.BaseAuthService$$ENZLuhtq.checkAuth(BaseAuthService.groovy:16)
... 8 more
2012年6月04日 15:01

4个答案 按时间排序 按投票排序

0 0

class.forName(),括号中的参数必须是字符串,WabaoBaseAuth这个类型是什么?不是字符串啊,这种基于jvm的脚本语言我觉得好恶心,有点四不像的感觉?

2012年6月04日 22:58
0 0

看看参数的类型

2012年6月04日 20:26
0 0

目测是classpath中没有com.emag.wabao.auth.ProvinceAuth

引用
public static Class<?> forName(String className)
                        throws ClassNotFoundException返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于:
  Class.forName(className, true, currentLoader)
其中 currentLoader 表示此类的定义类加载器。


如果forName不行,this.getClassLoader().loadClass(name)应该也不行

2012年6月04日 16:57
0 0

1.确定在classpath中含有com.emag.wabao.auth.ProvinceAuth
这个类!而且与当前类文件的class文件放在相同目录;

利用代码可以测试:
this.class.getClass().getResource("/"));查看当前路径

2.利用this.getClassLoader().loadClass(name)试试;

2012年6月04日 16:07

相关推荐

    java中Class.forName方法的作用详解

    Java中的`Class.forName()`方法是一个非常关键的工具,主要用于动态加载类。它的作用在于根据给定的类全名(包括包名)返回对应的`Class`对象。`Class`对象是Java反射机制的基础,它代表着运行时的类信息,可以通过...

    Class.forName

    `Class.forName()`是Java中一个非常重要的方法,它主要用于动态加载和实例化类。这个方法在编程中常常用于实现灵活性和解耦,特别是在框架和插件系统中。下面将详细解释`Class.forName()`的工作原理、用途及其与`new...

    Java Class.forName()无法加载类

    NULL 博文链接:https://listen-raining.iteye.com/blog/1894456

    class literal & instance.getClass() & Class.forName(String className)

    在Java编程语言中,"class literal"、"instance.getClass()" 和 "Class.forName(String className)" 是三个与类加载和类型查询紧密相关的概念。了解这些概念对于深入理解Java运行时的类加载机制至关重要。 首先,让...

    在Java的反射中,Class.forName和Class

    在Java的反射机制中,`Class.forName`和`ClassLoader`都是关键组件,它们在程序运行时动态加载类和实现类的实例化方面扮演着重要角色。理解这两个概念及其区别是深入掌握Java反射的重要一步。 首先,`Class.forName...

    class.forname的作用 详细解析抽象类和接口的区别

    然而,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。 了解抽象类 抽象类是指在面向对象领域中,用来表征我们在对问题领域进行分析、设计中...

    java中Class.forName的作用浅谈

    在Java编程语言中,`Class.forName()`方法是一个非常重要的功能,它主要用于动态加载类到Java虚拟机(JVM)中。这个方法的主要作用是根据给定的全限定类名(包括包名和类名)来查找并加载对应的类。下面我们将深入...

    Java Class.forName()用法和newInstance()方法原理解析

    Java Class.forName()用法和newInstance()方法原理解析 Class.forName()方法是Java语言中的一种Class加载机制,它可以根据类名将对应的类加载到JVM中,同时也可以实例化该类。Class.forName()方法的主要功能是要求...

    注册驱动:Class.forName(xxx.Driver).xmind

    对SPI,理论联系实际的理解

    Class.forName()_newInstance()_New_三者区别

    在Java编程中,`Class.forName()`, `newInstance()` 和 `new` 关键字都是与对象创建和类加载紧密相关的概念,但它们各自有着不同的用途和限制。 首先,`Class.forName("className")` 是一个静态方法,它用于在运行...

    浅谈java中类名.class, class.forName(), getClass()的区别

    Java 中类名.class, class.forName(), getClass() 的区别 Java 中有三种方式可以获取 Class 对象,即类名.class、class.forName() 和 getClass()。这些方法都可以获取 Class 对象,但是在获取 Class 对象的过程中,...

    liuwei1989#study-guide#17-Class.forName和classloader的区别1

    并且只有调用了newInstance()方法采用调用构造函数,创建类的对象看下Class.forName()源码//Class.forName(String c

    jdbc中class.forname的作用

    然而,这种方式并不常见,因为`Class.forName()` 已经成为了业界标准做法,它使得代码更简洁,同时也避免了直接实例化驱动类可能带来的问题,比如内存泄漏。 4. 避免仅加载不初始化:值得注意的是,如果只是简单地...

    Classfor的用法

    ### Class.forName 的用法详解 #### 一、概述 `Class.forName` 是 Java 反射 API 中的一个重要方法,主要用于动态加载类。该方法的主要作用是根据提供的全限定类名来加载并返回对应的 `Class` 对象。在 Java 开发...

    浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")

    `Class.forName()`方法内部调用了本地方法`forName0`,并传入了一个布尔参数`initialize`,默认值为`true`,表示在加载类之后执行初始化。初始化阶段不仅包括对类变量的赋值,还包括执行静态初始化块,对于父类也是...

    jdbc驱动程序实例

    - **Class.forName()**:用于加载特定的JDBC驱动类。 - **DriverManager.getConnection()**:用于建立到数据库的连接。 - **URL**:指定数据库的位置以及连接参数。 - **Connection**:表示与数据库之间的连接。 ##...

    java于各种数据库连接额语句

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl 为数据库SID String user = "test"; String password = "test"; ...

    浅析使用JDBC操作MySQL需要添加Class.forName(“com.mysql.jdbc.Driver”)

    如果熟悉使用JDBC来连接数据库的同学一定很清楚连接数据库的代码中一定会有依据Class.forName (com.mysql.jdbc.Driver); public static Connection getConnection() throws ClassNotFoundException, SQLException ...

    forname实现工程内部反射机制

    在“forname实现工程内部反射机制”这个主题中,我们将深入探讨如何利用`Class.forName()`方法来实现对工程内部类的动态访问。 首先,让我们了解`Class.forName()`的基本用法。这个方法接收一个字符串参数,该参数...

Global site tag (gtag.js) - Google Analytics