草庐IT

Reflection

全部标签

java - 无法使用 Java 8 修改 package-info.java 的注解

我遇到了一个问题,我必须修改一个包信息。包信息.java@javax.xml.bind.annotation.XmlSchema(namespace="http://some.url/soap/style/document_literal")packageorg.example.wsdl.wsdl;以下代码适用于1.7.0_45。//donotloadanyclassesbefore,thiscouldbreakthefollowingcode.ClasspkgInfo=Class.forName("org.example.wsdl.package-info",true,NameSpa

java - 令人惊讶的编译错误获取类的数组类

最近我在反射方面做了很多工作,并实现了这个小实用方法。我惊讶地发现第一个版本无法编译,但后者可以。不编译:publicstaticClassgetArrayClassOfType(ClasscomponentType){returnArray.newInstance(componentType,0).getClass();}编译并工作得很好:publicstaticClassgetArrayClassOfType(ClasscomponentType){Classc=Array.newInstance(componentType,0).getClass();returnc;}两个问题:

Java/Scala 反射 : Get class methods in order and force object init

我有一个类,其中有一些对象作为内部方法。我也问了thisquestion不久前得到了一个很好的答案,但这会导致servlet容器中出现fatalerror。当URLClassLoader请求类时,Scala无法始终如一地生成TypeTag。有问题的项目是开源的,找到here.目前找到的方法是here,但它不保留顺序。对象成员已正确初始化,但顺序是随机的。问题:如何收集类(class)成员:按照定义的顺序以线程安全的方式按父类(superclass)型过滤它们贪心初始化对象(引用module.instance)?更新:不要根据此处的链接建议答案,它们已经过测试并且已知会失败。出于风格原因

java - ComponentScan 如何工作?

@ComponentScan将为您提供包中所有带有@Component注释的类的列表(或@Service/@Repository).为此,我想他们使用反射来枚举包中的所有类并找到带有该注释的类。但是根据otherStackOverflowanswers由于ClassLoader的工作方式,您无法可靠地枚举包中的所有类。那么@ComponentScan是如何做到这一点的呢? 最佳答案 @ComponentScan的工作方式不同。工作流程简而言之:查找同一文件夹和所有子文件夹中的所有.class文件读取.class文件并将其包装成Res

java - bean 属性的类型如何为空?

在“ThinkinginJava”一书中有一个示例,说明如何通过反射/内省(introspection)获取bean的信息。BeanInfobi=Introspector.getBeanInfo(Car.class,Object.class);for(PropertyDescriptord:bi.getPropertyDescriptors()){Classp=d.getPropertyType();if(p==null)continue;[...]}在上述示例的第4行中,检查PropertyType是否为null。什么时候以及在什么情况下会发生这种情况?能举个例子吗?

java - 你如何让java方法注释在scala中工作

我有两个项目,一个scala项目和一个java项目。我的scala项目在构建路径中引用了java项目。在我的java项目中,我声明了以下注释:@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceMyAnnotation{publicStringName();}在我的Scala项目中,我正在注释一些方法。即classMyClass{...@MyAnnotation(Name="Blah")defmyMethod(){...}}在某个地方的另一个文件中,我试图提取注释。varmethod

java - 如何从 Java 8 中的 getAnnotatedParameterTypes() 获取泛型类型信息?

似乎getAnnotatedParameterTypes()返回一个包含原始类型而非通用类型的AnnotatedType数组。例如:publicvoidgenericMethod(Tt){}@TestpublicvoidtestAnnotatedTypes()throwsReflectiveOperationException{Methodmethod=getClass().getMethod("genericMethod",Object.class);Typetype=method.getGenericParameterTypes()[0];assertTrue(typeinstan

java - 使用反射在方法中检索类

classtest{publicstaticvoidmain(String[]args){newtest();}voidmethod(){classinside{inta;voidmethodinside(){}}}}我使用反射来声明类:Classc=Class.forName("test");Class[]cls=c.getDeclaredClasses();for(Classcl:cls)System.out.println(cl.getName());但是,我的程序找不到里面的类。 最佳答案 我认为没有找到本地类(在方法内定义

java - 如何在没有 Java 9+ 非法访问警告的情况下从进程获取 pid?

我需要为我启动的进程获取底层操作系统PID。我现在使用的解决方案涉及使用如下代码通过反射访问私有(private)字段:privatelonggetLongField(Objecttarget,StringfieldName)throwsNoSuchFieldException,IllegalAccessException{Fieldfield=target.getClass().getDeclaredField(fieldName);field.setAccessible(true);longvalue=field.getLong(target);field.setAccessibl

java - 使用反射设置字段 - String 没有 valueOf(String) 方法

我正在通过反射设置Objectthis的公共(public)字段。字段名称和值都以String的形式给出。我使用了几种不同的字段类型:Boolean、Integer、Float、Double、一个自己的enum和一个String。它适用于所有这些除了String。抛出的异常是不存在具有签名String.valueOf(String)的方法......现在我使用一个脏的instanceof解决方法来检测每个字段是否是一个字符串,在这种情况下只需将值复制到字段。privatevoidsetField(Stringfield,Stringvalue)throwsException{Field