草庐IT

Reflection

全部标签

Java反射题

我正在开发一个项目,该项目使用反射来获取正在运行的Java应用程序的字段。我设法获取了这些字段,但我无法读取或写入它们。这是我在网上找到的一个例子:ClassaClass=MyObject.classFieldfield=aClass.getField("someField");MyObjectobjectInstance=newMyObject();Objectvalue=field.get(objectInstance);field.set(objetInstance,value);问题是我使用了正在运行的jar文件中的类,而我尝试操作的类是从类加载器中获得的。因此,我只有“.cl

java - Mockito:是否可以将 mock 与方法名称结合起来在 when() 调用中创建 methodCall?

我在StackOverflow上的第一个问题。我希望能够做类似的事情:SomeClassmock=mock(SomeClass.class);StringmethodName="someMethod";或方法方法=...someMethod...这两个东西(mock和方法)将结合起来执行以下操作:when(mock.someMethod()).thenReturn(null);当然,'null'值会根据我的需要进行相应更改,但我试图确定两件事:1)是否有可能在Java中执行类似this的操作?This=将类对象和方法组合到methodCall中。2)我该怎么做?我一直在研究这个,但我找

java - 在方法调用期间将数组作为参数传递时出现 IllegalArgumentException

我一定错过了一些非常基本的东西。当我尝试在方法调用期间传递任何类型的数组时,出现错误。但是,当我正常执行时,它会起作用。这是失败的完整代码importjava.lang.reflect.Method;publicclassMain{publicstaticvoidmain(String[]args)throwsException{//NormalMyClass.sayHello(newString[]{"StackOverflow"});//ReflectionMethodm=MyClass.class.getMethod("sayHello",String[].class);m.in

java - 如何从存储在变量中的字符串调用 Java 函数

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Callingamethodnamed“string”atruntimeinJavaandC我需要能够调用一个函数,但是函数名存储在一个变量中,这可能吗?例如:publicvoidfoo(){//codehere}publicvoidbar(){//codehere}StringfunctionName="foo";//我需要根据函数名来调用函数任何帮助都会很棒,谢谢

java - 无法使用 getDeclaredFields() 检索 Scala 类的字段

我正在尝试将Java库(JOhm)与Scala一起使用,并注意到当库尝试使用类似model.getClass().getDeclaredFields()的内容读取我的Scala类的字段时它失败了.然后我决定尝试在Scala解释器中用简单的例子做同样的事情:scala>importjava.lang.reflect.Field;importjava.lang.reflect.Fieldscala>classmyClass(attribute1:String,attribute2:String,attribute3:String)definedclassmyClassscala>valmy

Java 8 实例创建注解

在JavadocsforAnnotations中,声明以下内容可以用Java8编写:new@InternedMyObject();无论如何,是否可以通过反射从像这样注释的对象中检索注释@Interned?我熟悉从方法、字段、类等中检索注释的典型方法,但我想知道是否可以在Java8的运行时将特定实例与注释相关联。 最佳答案 像new@AnnoObject()这样应用于实例创建的注释不是所创建对象的属性,而只是(编译时)类型的属性new表达式。在运行时,对象的实际类型没有注释,就像它没有您可能在创建实例时指定的通用类型参数一样。请考虑以

java - 在 Java 中,是否有更好的方法来替代 getter 和 setter 方法?

在Java类中有很多getter和setter方法是很常见的,每个数据模型类变量一个。我知道许多IDE会为您创建这些,但我试图避免这种困惑,并且我的类中没有所有这些方法。那么,有没有什么方法可以在类外以只读方式访问变量(就好像它是publicfinal一样),同时在类或子类内部只保留写访问权(就好像它是私有(private)的或protected)。我想出的唯一伪解决方案是一个基类(或具有默认方法的接口(interface)),它有一个get(StringvariableName)方法,然后通过反射获取类的字段并返回适当的字段。缺点是,要使其工作,变量必须是公共(public)的,所以

java - 从类和接口(interface)重新继承静态字段

interfaceA{publicstaticStringname="A";}interfaceB{publicstaticStringname="B";}classXimplementsA{}classYextendsXimplementsB{}publicvoidtest_getField(){try{assertEquals(B.class.getField("name"),Y.class.getField("name"));}catch(NoSuchFieldExceptione){fail("Gotexception");}}为什么Y.class.getField("name

java - Spring 与 Java 反射

我需要动态创建对象。我使用Spring创建一个类名映射。现在我可以使用了SpringApplicationContext.getbean(className)或JavaClass.forName(className).newInstance()。哪种方法效率更高?谢谢。 最佳答案 如果springbean是一个原型(prototype)范围的bean,Spring将必须使用反射来实例化它,因此必须执行您的第二个代码片段所做的事情。但是要求Spring上下文获取一个bean并不仅仅为您获取一个类的新实例。它返回一个Springbean

java - 如何使用反射从 POJO 中获取属性名称和值?

所以我正在编写一个“POJO到JSON”转换器。我希望能够传递List对象并转换为JSON。希望这是有意义的/****NOTCOMPLETE!!!OBVIOUSLY!!!*/publicabstractclassJsonatorimplementsSerializable{privateClassentityClass;privateJSONObjectjson;privateJSONArrayjsonArray;publicJsonator(ClassentityClass){this.entityClass=entityClass;}publicvoidconvert(Listpa