草庐IT

Reflection

全部标签

java - 用java反射实例化私有(private)内部类

是否可以使用Java反射从另一个类实例化私有(private)内部类。例如,如果我采用此代码publicclassMain{publicstaticvoidmain(String[]args){}}classOtherClass{privateclassTest{}}是否可以从main类中的main方法实例化并获得对Test的访问权限。 最佳答案 是的,您可以使用Java反射实例化私有(private)内部类。为此,您需要有一个外部类实例并调用内部类构造函数,该构造函数将在其第一个参数中使用外部类实例。classOuterClass

java - 通过反射访问Java静态最终变量值

Java静态final类变量的值可以通过反射获取吗? 最佳答案 我猜这取决于类型和编译器(再想一想,最好不要!)。Sun的编译器内联原始常量,但我不知道它们是否完全从类中删除了条目。我会找出答案的。编辑:是的,即使它们是内联的,您仍然可以访问它们。测试类:publicclassReflectionConstantTest{privatestaticfinalintCONST_INT=100;privatestaticfinalStringCONST_STRING="String";privatestaticfinalObjectCO

java - 通过反射访问Java静态最终变量值

Java静态final类变量的值可以通过反射获取吗? 最佳答案 我猜这取决于类型和编译器(再想一想,最好不要!)。Sun的编译器内联原始常量,但我不知道它们是否完全从类中删除了条目。我会找出答案的。编辑:是的,即使它们是内联的,您仍然可以访问它们。测试类:publicclassReflectionConstantTest{privatestaticfinalintCONST_INT=100;privatestaticfinalStringCONST_STRING="String";privatestaticfinalObjectCO

Java 反射 - 访问 protected 字段

如何通过反射从对象访问继承的protected字段? 最佳答案 您可能遇到的两个问题-该字段可能无法正常访问(私有(private)),并且它不在您正在查看的类中,而是在层次结构的某个位置。即使遇到这些问题,这样的方法也可以:publicclassSomeExample{publicstaticvoidmain(String[]args)throwsException{ObjectmyObj=newSomeDerivedClass(1234);ClassmyClass=myObj.getClass();FieldmyField=ge

Java 反射 - 访问 protected 字段

如何通过反射从对象访问继承的protected字段? 最佳答案 您可能遇到的两个问题-该字段可能无法正常访问(私有(private)),并且它不在您正在查看的类中,而是在层次结构的某个位置。即使遇到这些问题,这样的方法也可以:publicclassSomeExample{publicstaticvoidmain(String[]args)throwsException{ObjectmyObj=newSomeDerivedClass(1234);ClassmyClass=myObj.getClass();FieldmyField=ge

java - 如何使用反射在 Java 8 中获取方法参数名称?

Java8能够使用反射API获取方法参数名称。如何获取这些方法参数名称?据我所知,类文件不存储形式参数名称。如何使用反射获得这些? 最佳答案 Howcanigetthesemethodparameternames?基本上,您需要:获取对Class的引用从Class中,通过调用getDeclaredMethod()获取对Method的引用或getDeclaredMethods()返回对Method对象的引用从Method对象,调用(Java8中的新功能)getParameters(),它返回一个Parameter对象数组在Parame

java - 如何使用反射在 Java 8 中获取方法参数名称?

Java8能够使用反射API获取方法参数名称。如何获取这些方法参数名称?据我所知,类文件不存储形式参数名称。如何使用反射获得这些? 最佳答案 Howcanigetthesemethodparameternames?基本上,您需要:获取对Class的引用从Class中,通过调用getDeclaredMethod()获取对Method的引用或getDeclaredMethods()返回对Method对象的引用从Method对象,调用(Java8中的新功能)getParameters(),它返回一个Parameter对象数组在Parame

java - Enum.valueOf(Class<T> enumType, String name) 问题

我正在尝试解决与动态枚举查找相关的编译错误(“Boundmismatch:...”)。基本上我想实现这样的目标:StringenumName=whatever.getEnumName();Class>enumClass=whatever.getEnumClass();EnumenumValue=Enum.valueOf(enumClass,enumName);无论我做什么,我总是以编译错误告终。老实说,泛型和枚举对我来说非常令人难以置信......我在这里做错了什么? 最佳答案 我认为除非您可以访问类型变量(通过类型或方法签名),否

java - Enum.valueOf(Class<T> enumType, String name) 问题

我正在尝试解决与动态枚举查找相关的编译错误(“Boundmismatch:...”)。基本上我想实现这样的目标:StringenumName=whatever.getEnumName();Class>enumClass=whatever.getEnumClass();EnumenumValue=Enum.valueOf(enumClass,enumName);无论我做什么,我总是以编译错误告终。老实说,泛型和枚举对我来说非常令人难以置信......我在这里做错了什么? 最佳答案 我认为除非您可以访问类型变量(通过类型或方法签名),否

java - 是否可以在 java 中使用反射创建没有无参数构造函数的类的 'blank' 实例?

我有一个没有默认构造函数的类。我需要一种方法来获取此类的“空白”实例。“空白”表示实例化后所有类字段都应具有默认值比如null、0等。我问是因为我需要能够序列化/反序列化大树对象。而且我无法访问这些对象类的来源,并且类既没有默认构造函数也没有实现可序列化。尝试序列化这种结构可能不是一个好主意,但另一种方法是将其转换为更容易序列化的东西。 最佳答案 使用标准反射,没有,但是有一个库可以为您做到这一点:objenesis.它专门设计用于实例化没有默认构造函数的类,它被其他序列化库使用,如xstream.注意:在这些情况下可能不会调用构造