java:静态方法和继承。有没有解决的办法?

时间:2013-08-19 20:02:55

标签: java inheritance reflection static-methods

我有以下问题:

有一个引擎调用SuperClass的静态方法(我们称之为SuperClass.StaticMethod)。我无法访问引擎的代码,但我可以反思它。

我继承了SuperClass(生成SubClass),我能够通过反射编辑从SuperClass继承的私有字段。一切都还不错。

引擎有一个类(我们称之为常量),它有很多类的静态最终实例,包括SuperClass,但不是我的SubClass,因为它不是引擎的一部分。

现在,SuperClass.StaticMethod完全相同:

public int StaticMethod(int i)
{
    if(i == 0)
        return Constants.SuperClassInstance.Field_1;
    else if(i == 1)
        return Constants.SuperClassInstance.Field_2;
}

SuperClass.Field_1和SuperClass.Field_2都是私有的(并且它们不是静态的,人们认为它们是,所以我正在编辑这个问题),但静态方法可以看到它们,因为它是一个成员超类。正如我所说,我能够通过反射在我继承的SubClass上设置这些字段的值,但由于SupperClass.StaticMethod的工作方式,如上所示,它对它没有影响。

我认为我不能改变SuperClassInstance.Field_1和Field_2,否则我会打破SuperClass的工作方式,但是很明显。但

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在我看来,这是一个XY问题。这就是你的大多数问题都与设计有关。

首先,拥有私人静态决赛的目的是什么?既然它是最终的,它也可能是公开的。这是我经常看到的,但我认为这通常是一种不好的做法。

使某些东西变得静止,基本上使它成为全局的。对于像单身人士这样的事物,人们希望隐藏静态变量的全局性。但是,通常有辅助函数可以揭示这种“隐藏的,全局的”的有用功能。

听起来父类缺少那些使父类完全有用的方法。有没有办法可以改变父类的设计,而不是利用所有这些黑客来使你的项目有效?