【问题标题】:enum static variable reference between javajava之间的枚举静态变量引用
【发布时间】:2016-08-25 22:29:23
【问题描述】:

我正在使用和使用 Junit 的三个 java 文件。

测试类是关于主类中的枚举的错误。

编辑

我发现这是按原样工作的。只是没有在更大规模的实施中。

Goods.java

class Good {
    private static StaticTest.THESES name;
    static void setStatusName(StaticTest.THESES status) {
       name = status;
    }
    static StaticTest.THESES getStatusName() {
        return name;
    }
}

Test.class

import org.junit.Test;
import static org.junit.Assert.*;

public class Tests {

     @Test 
     public void test() {
        Good good = new Good();
        good.setStatusName(Library.STATUSES.HIM);
        String actual = good.getStatusName().toString();

         String expected = Library.STATUSES.HIM.toString();
         assertEquals(expected, actual);
    }

    public static void main(String args[]) {
        Tests runningTest = new Tests();
        runningTest.test();
    }
}

class Library {
    public static enum STATUSES {
        YOU, ME, HER, HIM, THEM, US
    }
}

你能告诉我我在产品类中找不到什么值吗?

【问题讨论】:

  • private Library.STATUSES status; 不是static。这段代码只是因为一个怪癖而编译 - status = status 将值分配给 itself
  • 请遵循 Java 命名约定。
  • @BoristheSpider 我不认为getStatus() 编译。
  • 另一点值得一提:您的“生产代码”(Good 类)绝对应该依赖于“测试代码”中的任何内容。测试代码依赖于生产代码,反之则不然!
  • @shmosel 我认为它应该;但我很懒,没试过。另外,我在大约 3 年内没有使用没有 final 参数的方法,所以我很可能是错的......

标签: java junit enums architecture static


【解决方案1】:

您需要更好地理解声明 static 的含义。我认为每个Good 都需要拥有自己的正确状态-因此,通过不将private status 声明为static,您处于正确的轨道上。您的问题(正如鲍里斯指出的那样)是您试图通过使用 static(类级别)方法来改变实例变量 status

我想你会想用下面这样的东西来开始你。

public class Test {

    public static void main(String[] args) {
        Good good = new Good();
        good.setStatus(Library.STATUS.SALE);
        System.out.println("Good's status: " + good.getStatus());
    }

}

class Good {

    private Library.STATUS status;

    public void setStatus(Library.STATUS status) {
       this.status = status;
    }
    public Library.STATUS getStatus() {
       return status;
    }
}

class Library {

    public enum STATUS { 
          SALE, NOSALEITEM, ITEMOOS, SHIPPING, ONORDER, INSTOCK
     }
}

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 2013-06-14
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多