反射应用经验:得到当前类的包名

反射应用经验:得到当前类的包名
在反射机制中,Class.forName(className).newInstance();
如果你想通过反射机制得到当前包的某个类的实例,传入类名的同时必须传入包名。

例如在包com.coderdream下有两个类Shape,ShapeFactory,如果你想在ShapeFactory中的某个方法中用反射的方法生成Shape类,那么如果直接使用:
    Class.forName("Shape").newInstance();
会抛出找不到类的异常,因为确实没有Shape类,而只有com.coderdream.Shape类。

但是我们传参数时一般只会传不带包的类名,那么我们可以这样处理:
    String packageName  =   new  ShapeFactory().getClass().getPackage().getName();
    
return  (Shape) Class.forName(packageName  +   " . "   +  className).newInstance();
其中    new ShapeFactory().getClass().getPackage().getName() 会得到包名“com.coderdream”,我们只要加上“.”和类名就没有问题了。

你可能感兴趣的:(反射应用经验:得到当前类的包名)