Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javajar中重写静态方法_Java_Jar_Classpath_Static Methods - Fatal编程技术网

在javajar中重写静态方法

在javajar中重写静态方法,java,jar,classpath,static-methods,Java,Jar,Classpath,Static Methods,在我正在从事的一个项目中,我有一个代码库,我想在多个Java项目中共享它 在这个库中,我需要调用一个静态函数。但是,此调用的功能需要根据其所在的项目进行更改。例如,假设我有: public class CommonCode { public void foo () { A.bar(); } } 另一类: package x.y.z; public class A { public static void bar() {

在我正在从事的一个项目中,我有一个代码库,我想在多个Java项目中共享它

在这个库中,我需要调用一个静态函数。但是,此调用的功能需要根据其所在的项目进行更改。例如,假设我有:

public class CommonCode
{
    public void foo ()
    {
        A.bar();
    }
}
另一类:

package x.y.z;

public class A
{
    public static void bar()
    {
        // This functionality varies based on the project
    }
}
现在,我通过在我自己的项目中的同一个包中放置一个同名文件来实现这一点,因此它位于类路径中JAR的前面。例如:

package x.y.z;

public class A
{
    public static void bar()
    {
        // Custom code that requires other knowledge of my local project
    }
}
这是可行的,但正如我在网上读到的,这通常不是一个“好”的解决方案,应该被视为最后的手段


我想知道解决这个问题的更好方法是什么/如果我在项目运行时完全控制它,那么情况会有多糟。

使用一个工厂模式,它返回应该使用的类的实例(注意,这消除了对方法的静态要求)。然后,您可以使用一个配置文件来描述您想要使用的类,您可以在运行时动态加载该类。您是说在库中包含一个抽象工厂,然后在我的各个项目中将其扩展为一个具体的类?并将该类加载到库代码中?为什么不制作一些包含
bar()
,并将从所述接口继承的对象传递给您的库?我认为工厂将是具体的,并返回一个植入功能的抽象类或接口这是静态被高估的示例之一;)