我有一个我无法修改的类,如下所示:
public class ValueSupplier {
public static final class Value {
private final Long id;
private final String value1;
private final String value2;
Value(Long id, String value1, String value2) {
this.id = id;
this.value1 = value1;
this.value2 = value2;
}
// getters omitted
}
无论如何,我可以在类所在的包之外使用静态 Value 类而不使用反射吗?我想不值得问。 List是从ValueSupplier中的某个方法返回的,并且想要模拟该方法但不能返回List,因为我无法访问该包。
如果使用反射 - 最简单,最明确的解决方案是什么?
编辑: 我的意思是通过构造函数创建它的实例 - 这是我的问题。
答案 0 :(得分:1)
如果无法修改嵌套类,则只能使用Reflection API。
主要思想是获取构造函数(1),通过AccessibleObject#setAccessible
使其可访问(2)并调用它(3)。
import <package>.ValueSupplier;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class ClassFromAnotherPackage {
@SuppressWarnings("unchecked")
public void methodFromAnotherPackage()
throws IllegalAccessException, InvocationTargetException, InstantiationException {
final Constructor<?>[] constructors = ValueSupplier.Value.class.getDeclaredConstructors();
if (constructors.length > 0) {
final Constructor<ValueSupplier.Value> constructor = (Constructor<ValueSupplier.Value>) constructors[0]; // 1
constructor.setAccessible(true); // 2
final ValueSupplier.Value value = constructor.newInstance(1L, "str1", "str2"); // 3
}
}
}