gpt4 book ai didi

java - 从包外部使用包私有(private)构造函数访问最终静态类

转载 作者:行者123 更新时间:2023-11-30 06:07:56 24 4
gpt4 key购买 nike

我有一个无法修改的类,如下所示:

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,因为我无权访问该包。

如果使用反射 - 最简单、最清晰的解决方案是什么?

编辑:我的意思是通过构造函数创建它的实例 - 这是我的问题。

最佳答案

如果嵌套类无法修改,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
}

}

}

关于java - 从包外部使用包私有(private)构造函数访问最终静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50895350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com