在没有setter Java的子类中为私有超类变量设置值



所以我有一个赋值,其中我有一个子类,它有一个不带setter的私有intsance变量,而该变量不在构造函数参数中我需要在具有不同值的多个子类中使用重写的void类型方法为该变量分配一个值,我该怎么办?

如果不允许您使用任何setter方法,并且您的变量具有私有访问权限,那么您必须使用反射api欺骗系统。我知道你正在使用什么编程语言,但这里有一个你在java中如何使用的示例

class Test<T> //Template cause u said it can have multiple values                              {
private T secret;
abstract void set(T myvalue);//this is void method u will be overriding
}
class A extends Test<Integer>
{
void set(Integer value)
{
Field field=Test.class.getDeclaredField("secret");
field.setAccessible(true);
field.setValue(this,5);
}
}
class B extends Test<Float>
{
void set(Float value)
{
Fieldfield=Test.class.getDeclaredField("secret");
field.setAccessible(true);
field.setValue(this,5.5f);
}
}

正如你所看到的,我们无法从我们的子类访问类T中的变量secret,但如果我们只知道它的名称,我们可以通过反射来破解它。反射是一个在所有语言中都可用的api。同样,我不知道你为什么会这么做,但正如评论所暗示的那样获得更好的任务-_-

最新更新