我想在另一个类的一个类中引用一个注释值。喜欢这里 -
class A {
private static final String STATIC_STRING = B.class.getMethod("myMethod").getAnnotation(SomeAnnotation.class).name();
}
这里的问题是我无法使用此语法,因为它需要将getMethod
包装在try-catch
中,这是不可能的。虽然我可以使用static
块来创建这个变量并且只是在catch
块中吞噬异常,但我不想这样做,因为如果以后方法名称被更改,编译器会赢得& #39; t在static
块中抛出错误。
我想知道我是否能做类似
的事情private static final String STATIC_STRING = (B::myMethod).getAnnotation(SomeAnnotation.class).name();
注意:B
和SomeAnnotation
都不是我的来源,它们来自另一个图书馆。
我这里有2个问题
::
获取java.lang.reflect.Method
的实例?完全可能吗?如果是,反之亦然,即从Method
对象创建供应商或映射器?答案 0 :(得分:0)
关于第一个问题,你考虑过使用吸气剂吗?
private static String getSomeAnnotationName() {
try {
return B.class.getMethod("myMethod").getAnnotation(SomeAnnotation.class).name();
} catch (NoSuchMethodException e) {
return null;
}
}
对于您的第二个问题,我认为从Method
获取::
是不可能的。这是因为从::
得到的方法代表了功能接口的实现,而不是真正的方法。但是,反过来是可能的。你可以像这样创建一个lambda:
Consumer<SomeType> consumer = x -> {
try {
yourMethod.invoke(someObject, x)
} catch (...) {
// again you have to ignore the exceptions here, unfortunately
}
};