import org.apache.commons.lang3.reflect.MethodUtils;
import javax.annotation.PostConstruct;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by dims on 13.10.2016.
*/
public class CallPrivateMethodTest {
@Retention(RUNTIME)
@Target(METHOD)
public @interface MyAnnotation {
}
public static class MyClass {
@MyAnnotation
private void myMethod() {
System.out.println("myMethod() ran");
}
}
public static void main(String[] args) {
MyClass myObject = new MyClass();
List<Method> methods = MethodUtils.getMethodsListWithAnnotation(myObject.getClass(), MyAnnotation.class);
for(int i=0; i<methods.size(); ++i) {
try {
methods.get(i).invoke(myObject);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
必须对方法调用setAccessible(true)
。
请参见AccessibleObject的Javadoc,它是方法的超类型。
在您的示例中:
methods.get(i).setAccessible(true);
methods.get(i).invoke(myObject);
MyClass myObject = new MyClass ();
Method[] allMethods = myObject.getClass ().getDeclaredMethods ();
List<Method> annotatedMethods = Arrays.stream (allMethods)
.filter (m -> m.getAnnotation (MyAnnotation.class) != null)
.collect (Collectors.toList ());
for (Method method: annotatedMethods) {
try {
method.setAccessible (true);
method.invoke (myObject);
} catch (IllegalAccessException e) {
e.printStackTrace ();
} catch (InvocationTargetException e) {
e.printStackTrace ();
}
}
问题内容: 我们的Docker映像会发送封闭源代码,我们需要使用自己的私有Docker注册表将它们存储在安全的地方。我们搜索 具有简单身份验证层的部署私有docker注册中心的最简单方法 。 我发现 : 这种手动方式http://www.activestate.com/blog/2014/01/deploying-your-own-private-docker-registry 和基于stackb
问题内容: 我在生产中有20GB +的rdb转储。我怀疑有一组特定的按键使它blo肿。我希望有一种方法可以始终从静态转储分析中发现前100个最大对象,或者将其询问给服务器本身,而服务器本身有7M个对象。 像rdbtools这样的转储分析工具在这个(我认为)非常常见的用例中无济于事! 我当时想编写一个脚本,并使用“ redis-cli调试对象”对整个键集进行迭代,但是我感觉必须缺少某些工具。 问题答
最好的方法是什么?JCUDA是一个完美的映射到C CUDA还是完全不同?或者从Java调用C代码并共享结果是否有意义(链接列表是否可以访问)?
本文向大家介绍PowerShell单行注释、多行注释、块注释的方法,包括了PowerShell单行注释、多行注释、块注释的方法的使用技巧和注意事项,需要的朋友参考一下 PowerShell的注释符分为行注释符和块注释符。行注释符使用井号(#)引起一行;块注释符使用“<#”和 “#>”来引起一段注释。 行注释符 举例如下: 块注释符、多行注释 举例如下: 这是小编每次写脚本之前,都会定义的一段关于脚
我正在与一些开发人员合作,我们希望在处理项目代码的早期迭代时分享一些jar。我们只想弹出一个快速的私有maven存储库服务器来使用一小段时间。在Ruby中,它就像打字一样简单: 显然,没有? 即使是对github的一个简单maven依赖也可以在短时间内实现。显然,也没有主流可靠的maven插件? 我找到的最简单的答案就在这里:在github上托管一个Maven知识库。 当然,上面StackOver
问题内容: 反转此ArrayList的最简单方法是什么? 问题答案: 示例(参考):