【问题标题】:How to pass a value to the method?如何将值传递给方法?
【发布时间】:2025-09-21 15:20:02
【问题描述】:

在下面的代码中我是硬编码USER_AND_ADMIN:

this.contentUrl.getUtils().createType(url, user, content,USER_AND_ADMIN);

USER_AND_ADMIN会根据场景变化;我可能需要传递的其他类型是USERADMINNONE

有人可以帮忙吗?

【问题讨论】:

  • 你在传递enum 值吗?
  • 没有。我没有通过
  • 你需要用这段代码做什么?价值何时以及为何会改变?

标签: java class enums constants


【解决方案1】:

您可以使用ENUMS

喜欢先创建一个枚举

public enum MyEnumValues{
      USER_AND_ADMIN,
      USER,
      ADMIN,
      NONE
}

然后让你的条件代码基于枚举工作:

MyEnumValues resultScenario = MyEnumValues.NONE;
if(scenaio1)
{
       resultScenario = MyEnumValues.USER_AND_ADMIN;
}else if(scenario2)
       resultScenario = MyEnumValues.USER;
}

//use and pass it to your method (you might have to change your method signature):
this.contentUrl.getUtils().createType(url, user, content,resultScenario );

【讨论】:

    【解决方案2】:

    像这样创建一个枚举

    public enum UserType {
        USER_AND_ADMIN, USER, ADMIN, NONE;
    }
    

    然后在方法声明中使用它:

    ... methodName(... , UserType userType, ...) { ...
    

    调用方法时,只需要这样做:

    this.contentUrl.getUtils().createType(url, user, content, UserType.USER_AND_ADMIN);
    

    在该方法中,您可以通过使用#name() 方法获得String 表示:

    String userTypeAsString = userType.name();
    

    默认情况下,String 表示与变量的名称相同,因此如果您不定义自己的#toString(),它与#name() 完全相同。如果您需要自定义表示,请编写自己的#toString(),并使用它来代替#name()

    我更喜欢在适用的情况下使用#name(),因为您可以确定它没有被覆盖——因为它是Enumfinal 方法。

    更新:

    如果你真的不想使用enums(虽然我不知道为什么),你可以使用普通的字符串常量:

    private static final String USER_AND_ADMIN = "USER_AND_ADMIN";
    

    然后根据值进行分支:

    if (userType.equals(USER_AND_ADMIN)) {
        ....
    }
    

    或者,如果您使用的是 Java 7 或更新版本:

    switch (userType) {
        case USER_AND_ADMIN:
            // ...
            break;
        case NONE:
            // ...
            break;
        default:
            break;
    }
    

    如果您使用的是enums,则该开关也适用于 Java 7。

    【讨论】:

    • 你能建议我另一种方式吗,我的意思不是枚举