gpt4 book ai didi

java - Final 类中的模拟静态枚举

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:54 25 4
gpt4 key购买 nike

有一个 X 类;

public final class X {
private X() {}
...
public static enum E {
thingA("1"),
thingB("0")

public boolean isEnabled(){...}
}
...
}

在另一个类中有一个方法 M

public class AnotherClass{

public void M(){
if (E.thingB.isEnabled()) {
doSomething();
}
}
...
}

我想测试M方法,是否可以使用mockito/powermockitoif 内的模拟语句。做这样的事情

 when(E.thingB.isEnabled()).thenReturn(true)?

最佳答案

无论枚举是否嵌套,您都无法创建或模拟枚举的新实例。 Enums are implicitly final ,更重要的是,它打破了枚举的所有实例都在枚举内声明的假设。

An enum type has no instances other than those defined by its enum constants. It is a compile-time error to attempt to explicitly instantiate an enum type. (JLS)

因为枚举的所有实例在编译时都是已知的,并且这些实例的所有属性同样都是可预测的,通常您可以只传递一个符合您需求的实例,而无需模拟任何内容。如果您想接受具有这些属性的任意实例,请让您的枚举实现一个接口(interface)。

public interface I {
boolean isEnabled();
}

public enum E implements I { // By the way, all enums are necessarily static.
thingA("1"),
thingB("0");

public boolean isEnabled(){...}
}

关于java - Final 类中的模拟静态枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28348956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com