gpt4 book ai didi

reflection - 通过 Consumer<> 对象获取类名

转载 作者:行者123 更新时间:2023-12-02 04:50:19 25 4
gpt4 key购买 nike

我想使用 Consumer<> 的对象检测类名类。

例子

MyClass myObject = new MyClass();

someMethod(myObject::myMethod);

void someMethod(Consumer<String> fn) {
// here i want to know class name "MyClass" through fn
}

这可能吗?

最佳答案

fn 参数不保存有关调用类的信息。

但是,您可以使用单个 static 方法实现实用程序类,它会为您完成这项工作。您可以利用 Thread.currentThread().getStackTrace() 表达式生成的数组来检查导致您的方法的回调跟踪。例如:

public final class CallInspector {
public final static String getCallingClassName() {
StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
return IntStream.range(1, stElements.length)
.mapToObj(i -> stElements[i].getClassName())
.filter(name -> !name.equals(CallInspector.class.getName()))
.findFirst()
.orElse(null);
}
}

请注意,我们将跳过索引 0 处的 StackTraceElement,因为它始终是 java.lang.Thread

然后,在您的 myMethod() 中调用实用程序一:

void someMethod(Consumer<String> fn) {
String callerClass = CallInspector.getCallingClassName();
}

关于reflection - 通过 Consumer<> 对象获取类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29330613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com