在 Java 中,可以通过 Runtime
类提供的 loadClass
方法获取正在扩展的类的名称。具体实现方式如下:
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class ClassName {
public static void main(String[] args) throws ClassNotFoundException {
// 获取正在扩展的类的名称
String className = getClassName();
System.out.println("正在扩展的类名称:" + className);
}
private static String getClassName() throws ClassNotFoundException {
// 获取调用者的类名
String callerClassName = ClassName.class.getName();
callerClassName = callerClassName.substring(callerClassName.lastIndexOf('.') + 1);
// 通过调用类的构造方法获取类名
Class<?> callerClass = Class.forName(callerClassName);
Method[] methods = callerClass.getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals("getClassName")) {
Object[] args = method.getParameters();
if (args.length == 0) {
return (String) method.invoke(null);
} else {
throw new IllegalArgumentException("Invalid method signature");
}
}
}
throw new ClassNotFoundException("Class not found: " + callerClassName);
}
}
在上述代码中,我们首先通过 Class.forName
方法获取调用者的类名,然后通过循环遍历该类的所有方法,查找名为 getClassName
的方法。该方法应该是一个私有方法,没有参数,返回类型为 String
。如果找到了该方法,就可以通过反射调用该方法并获取其返回值,即正在扩展的类的名称。如果没有找到该方法,就会抛出一个 ClassNotFoundException
。
领取专属 10元无门槛券
手把手带您无忧上云