Tag: reflection

有关serviceloader的Java 9依赖性问题

基于这种情况,我有一个关于serviceloader如何在Java 9中发生变化的问题 脚本 项目gert Class Main package gert; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; public class Main { static public void test() throws JAXBException { InputStream is = new ByteArrayInputStream(“”.getBytes(StandardCharsets.UTF_8)); JAXBContext jaxbContext = JAXBContext.newInstance(ClassesDef.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); unmarshaller.unmarshal(is); } } Project gert Class ClassesDef package gert; import javax.xml.bind.annotation.XmlAttribute; […]

如何在运行时收集实现接口的所有类?

为了自动运行我的所有测试类,我查找专用目录中的所有类文件,将路径转换为包名并检查此类是否实现给定的接口: try { Class myTestClass = Class.forName( constructedClassName ); if( myTestClass.isInstance( MyTestInterface.class ) ) { testCollection.add( myTestClass ); } } catch( Error e ) { // ignore, no valid test class } 今天我使用这种技术遇到了一个丑陋的bug( 参见这个SO问题 )。 题: 如何收集我的所有测试类而不必忽略我不感兴趣的类可能出现的错误?

在Java中,是否可以动态创建仅给定父类实例的匿名子类实例?

在Java中,是否可以动态创建仅给定父类实例的匿名子类实例? 我试图实现的模式代码如下所示: public interface IStringCarier { public String getStr(); } public static IStringCarier introduce(Object victim, final String str) { // question subject } public class AAA { } public static void main() { AAA aaa = new AAA(); assert !(aaa instanceof IStringCarier); IStringCarier bbb = introduce(aaa, “HelloWorld”); assert aaa == bbb; assert “HelloWorld”.equals(bbb.getStr()); } 实际上还有2个关于此代码的要求问题: […]

Java Reflection私有方法与参数最佳方法?

我试图使用javareflection调用私有方法我开发了一个小方法来调用其他方法迭代所有方法并按名称和参数类型进行比较我已成功调用4个方法。 我有一个问题。 1)。 这是最好的方法吗? 因为我理解class.getMethod只匹配公共方法。 Java内置了什么? 这是我的代码。 public class Compute { private Method getMethod(Class clazz,String methodName,Class…parametersClass) { outer: Method[] methods = clazz.getDeclaredMethods(); for(Method method:methods) { //comparing the method types… of the requested method and the real method….. if(method.getName().equals(methodName) && parametersClass.length== method.getParameterTypes().length)//it a possible match { Class[]arrayForRealParameters = method.getParameterTypes(); //comparing the method types… of the requested […]

使用reflection更改布尔字符串值不起作用

我正在尝试Javareflection和内联字符串,并得出结果,我觉得令人困惑。 import java.lang.reflect.Field; public class HappyDebugging { public static void main(String[] args) throws Exception { defineTrueFalse(); System.out.println(“true is ” + true); // why is it “true is true”? System.out.println(“false is ” + false); System.out.println(true); System.out.println(false); System.out.println(“true”); System.out.println(“false”); System.out.println(“true is ” + Boolean.valueOf(true)); System.out.println(“false is ” + Boolean.valueOf(false)); System.out.println(“true is ” + Boolean.valueOf(“true”)); System.out.println(“false is ” […]

通过reflection调用子类的方法

这是我的超类Animal class Animal { //Empty } 我的子类Tiger class Tiger extends Animal { public static void TigerPrint() { ——- System.out.println(“Tiger”); } public void Run() { System.out.println(“Tiger Running”); } } 我做了, Animal a=new Tiger(); 在编译时, a将是一个Animal 。在运行时它将是Tiger 。 所以我做了 a.getClass().getMethod(“TigerPrint”).invoke(null);//WORKS a.getClass().getMethod(“Run”).invoke(null);//NOT WORKING (NullPointerException) 如何通过reflection调用subclass的Run方法。 是的,我能做到 ((Tiger)a).Run(); 但是我怎么能在反思中做到这一点!

以编程方式实现以各种指定方式组合同一接口的某些实例的接口

实现以各种指定方式组合同一接口的某些实例的接口的最佳方法是什么? 我需要为多个接口执行此操作,并且我希望最小化样板并仍然实现良好的效率,因为我需要将其用于关键生产系统。 这是问题的草图。 抽象地说,我有一个通用的组合器类,它接受实例并指定各种组合器: class Combiner { I[] instances; T combineSomeWay(InstanceMethod method) { // … method.call(instances[i]) … combined in some way … } // more combinators } 现在,假设我想在许多其他界面中实现以下界面: Interface Foo { String bar(int baz); } 我想最终得到这样的代码: class FooCombiner implements Foo { Combiner combiner; @Override public String bar(final int baz) { return combiner.combineSomeWay(new InstanceMethod { @Override […]

在applet中使用GSON库时的reflection权限问题

我正在编写一个进行JSON-RPC调用的Applet。 我正在使用Google JSON库(GSON)将响应JSON转换为类。 Thsi似乎工作得很好但是当我在我的Applet中使用这个代码时,我遇到了一个java.lang.reflect.reflectpermission 。 从我在SO上看到的这个post来看,似乎由于GSON使用Reflection,我不能在Applet中使用它,除非我明确修改了安全策略。 我怎么能绕过这个? 我在我的应用程序中创建了一堆类,并使用Gson.fromJson方法将其Gson.fromJson转换为类。 有没有办法实现相同的function,而无需重写我的一半代码。 (在Java中处理JSON的复杂性似乎属于它自己的联盟​​!) 先谢谢你们。

通过reflection访问main方法中的局部变量

只是玩Javareflection,我想我大部分时间都在掌握它。 我从这个问题/答案中了解到,在大多数情况下,我仅限于静态变量。 如果我有一个类的实例,我可以访问非静态变量,这确实有意义,我得到了那么多。 说我有以下两个类: public class A { private static int _staticInt; public static void main(String[] args) { B instanceOfB = new B(); } } public class B { private int _nonStaticInt; public Game() {} } 我理解如何访问_staticInt ,这不是问题。 我的理解是我可以以相同的方式获取_nonStaticInt的Field (即Field f = B.class.getDeclaredField(“_nonStaticInt”); )。 从其他研究(javadocs, _nonStaticInt等)我收集到我需要B的实例才能获得_nonStaticInt的值。 所以我的问题; 由于main是静态的,是否可以访问instanceOfB以访问_nonStaticInt的值? 我不认为这是可能的,但我认为在放弃这个想法之前,最好先咨询比我更了解的人。

如何使用Javareflection获取参数名称

如何使用Javareflection获取方法签名? 编辑: 我实际上需要参数NAMES而不是方法的类型。