有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

  • 版本1:所有类变量都必须是静态的
  • 第2版:。。。而不是静态地拥有它们

寻找处理这一问题的好方法;例如关于维护

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


共 (1) 个答案

  1. # 1 楼答案

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

    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 implements Foo…因为你想让所有这些方法静态来满足你奇怪的需求)。为了改善这一点;这里会好一点:

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

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