Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Java 同一类的两个版本(一个是静态的,一个是非静态的)_Java_Static - Fatal编程技术网

Java 同一类的两个版本(一个是静态的,一个是非静态的)

Java 同一类的两个版本(一个是静态的,一个是非静态的),java,static,Java,Static,我想在我的jar文件中有一个类的2个版本: 版本1:所有类变量都必须是静态的 第2版:。。。而不是静态地拥有它们 寻找处理这一问题的好方法;例如关于维护 我目前的解决方案是在我更改某些内容后复制该类,并用副本覆盖另一个类并更改变量类型。实际上,有一个简单的答案。比如: public interface Foo { public String bar(); } public class FooImpl implements Foo { @Override public Strin

我想在我的jar文件中有一个类的2个版本:

  • 版本1:所有类变量都必须是静态的
  • 第2版:。。。而不是静态地拥有它们
寻找处理这一问题的好方法;例如关于维护


我目前的解决方案是在我更改某些内容后复制该类,并用副本覆盖另一个类并更改变量类型。

实际上,有一个简单的答案。比如:

public interface Foo {
  public String bar();
}

public class FooImpl implements Foo {
  @Override
  public String bar() {  ...
}

public class StaticFoo  {
  private final static Foo foo = new FooImpl();
  public static String bar() {  return foo.bar() };
}
换句话说:您实现了“非静态”解决方案作为“基础”。然后创建另一个类,该类在静态庄园中提供所有必需的方法,依靠现有的实现避免代码重复

作为记录:这仍然是一个丑陋的解决方案。我宁愿退一步,看看你打算用它来解决的问题。但以上这些仍然是你可以使用的。当然:它可以与方法一起使用,但我希望您清醒地认识到,您不是在进行OO编程,而是依赖于在类中使用字段。OOP是关于行为(方法),而不是状态(字段)

(这很难看,因为你不能放下
StaticFoo实现Foo
…因为你想让所有这些方法都是静态的,以满足你奇怪的需求)。为了改善这一点;这里会好一点:

public class StaticFooProvider {
  public final static Foo = new FooImpl();
}

在某种意义上,它为您提供了该服务接口的单个静态实例;您现在可以在其上以非静态的方式调用方法。

您到底想实现什么?这听起来像是一个非常破碎的设计/要求。为什么不只拥有一个类和该类的一个静态实例呢?静态类的原因是它被用作许多脚本的基类,它里面有一些东西,比如驱动程序等等。非静态版本用于testNG脚本,这样它们就可以并行运行。向我们展示您的尝试和您想要的示例感谢您的想法,我在代码中实现了它。在实现这一点时,我想到了另一种方法。为变量创建getter和setter,并有一个静态变量,说明它是在静态模式还是在正常模式下运行。(我没有这么做,因为我希望我能很快摆脱静电的东西)你得到了我的支持,因为我知道静电是邪恶的;-)