我有两个班级Child1
和Child2
,班级Parent
的孩子。类Parent
具有静态成员,并且两个子类具有使用此静态成员的静态方法run()
。因为我必须在同一个应用程序中调用Child1.run()
和Child2.run()
,所以我希望每个子类都可以访问它自己的父类静态成员版本。
我知道将父类的静态成员放入子类会更容易,但我无法修改类的源代码。
我读到了我应该使用两个不同的类加载器,但我不明白如何。有人可以解释我如何使用类加载器来实现我提到的结果,也许有一些示例代码?
答案 0 :(得分:2)
是的,您可以使用两种不同的ClassLoader。您需要编译类(Parent
,Child1
和Child2
),但它们不应与您调用它们的类位于相同的类路径位置(调用该类{ {1}})。
相反,将它们放在磁盘上的某个目录中,或者将它们放在jar文件中。
从该位置,您可以创建多个类加载器,并且可以使用方法Main
来加载类;并且您可以使用反射来调用方法,例如方法loadClass
。
run
P.S。这对于通用应用程序来说是糟糕的设计,但您没有说您正在制作通用应用程序。因此,我没有看到任何理由通过劝阻有助于解释JVM如何工作的有趣问题来愚蠢。
答案 1 :(得分:0)
那么,类级别成员/静态成员的目的是为每个JVM创建一个副本。你在问题中建议的是打败上述目的。
如果是这种情况,您应该使用实例级别成员来实现它。见this