我想使用Consumer<>
类的对象检测类名。
实施例
MyClass myObject = new MyClass();
someMethod(myObject::myMethod);
void someMethod(Consumer<String> fn) {
// here i want to know class name "MyClass" through fn
}
有可能吗?
答案 0 :(得分:0)
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);
}
}
请注意,我们正在跳过索引StackTraceElement
的{{1}},因为它始终为0
。
然后,在你的java.lang.Thread
中只调用一个实用程序:
myMethod()