我正在尝试执行以下代码。我的IDE告诉我
USER_ROLE_EMPLOYEE无法解析为变量
这是我的代码:
public class TestUserHelper {
@Before
public void setUp() throws Exception {
String USER_ROLE_EMPLOYEE="Service Desk";
String USER_ROLE_MANAGER="Store Manager";
}
@Test
public void testIsUserRoleValidEmployee() {
Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_EMPLOYEE));
}
@Test
public void testIsUserRoleValidSupervisor() {
Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_MANAGER));
}
}
我收到一条错误消息,说USER_ROLE_EMPLOYEE
,USER_ROLE_MANAGER
无法解析为变量。
我在做什么错了?
答案 0 :(得分:1)
Java具有不同类型的变量:
USER_ROLE_EMPLOYEE
和USER_ROLE_MANAGER
变量是局部变量。因此,不可能通过不同于声明它们的方法来访问它们。private
),并详细了解该here。static
变量)。与实例变量不同,它们仅存在一次,并且可以从类中的任何方法(甚至是static
的方法)中访问。在与实例变量相同的位置声明类变量,但使用static
关键字。与实例变量一样,根据声明的访问修饰符,可以从类外部访问这些变量。与实例变量不同,它们不需要类的实例。因此,在您的代码中,您可以:
使用实例变量代替局部变量:
public class TestUserHelper {
private String USER_ROLE_EMPLOYEE, USER_ROLE_MANAGER;
@Before
public void setUp() throws Exception {
USER_ROLE_EMPLOYEE = "Service Desk";
USER_ROLE_MANAGER = "Store Manager";
}
@Test
public void testIsUserRoleValidEmployee() {
Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_EMPLOYEE));
}
@Test
public void testIsUserRoleValidSupervisor() {
Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_MANAGER));
}
}
或者,我建议使用第二种方法,因为您的变量实际上是常量:将它们声明为static
(类变量)和final
(常量) )。您将无法再在setUp()
中对它们进行初始化,但是看到它们是恒定的,那不是问题:
public class TestUserHelper {
private static final String USER_ROLE_EMPLOYEE = "Service Desk";
private static final String USER_ROLE_MANAGER = "Store Manager";
@Test
public void testIsUserRoleValidEmployee() {
Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_EMPLOYEE));
}
@Test
public void testIsUserRoleValidSupervisor() {
Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_MANAGER));
}
}
答案 1 :(得分:0)
之前是设置方法方法,当前变量仅在方法范围内是局部变量,将其作为常量移动到类中,如@JB Nizet所述
private final static String USER_ROLE_EMPLOYEE="Service Desk";
答案 2 :(得分:0)
@ O.OBalance的答案非常好,我想补充一点,就是可以使局部变量变得更加局部!
他简要介绍了作用域,我还要补充一点,范围的定义更加广泛:花括号({}
)之间的任何代码段都是 scope 。并且局部变量对于范围是局部的。这意味着您只能将变量仅用于方法的一部分。
一个常见的例子是循环:
public int test(){
int a = 1;
while(a < 10){
int b = 2;
a += b;
}
if (b = null) {
System.out.println("See ?");
}
{
str b = "this is a scope";
}
if (b = null) {
System.out.println("And see this too ?");
}
return a;
}