将String作为单独类型传递的最佳方法是什么?

时间:2011-07-08 19:59:05

标签: java

我想在下面创建一个类似example的方法,以确保用户只能提供与Name类中定义的常量之一相对应的值:

public class Name{
 public static String JOHN = "John";
 public static String MARY = "Mary";
 public static String TAB = "\t";
}

public void example(Name name){
 test(name);
}

public void test(String name){
 System.out.println(name);
}

基本上example方法只需要String个参数。但是我想限制用户可以传递的字符串类型,所以如果我创建参数String name,它将对任何类型的输入开放。

有更简单的方法吗?

5 个答案:

答案 0 :(得分:4)

使用枚举?

public enum Name{
 John, Mary;
}

public void test(Name name){
 System.out.println(name);
}

混合概念是一个坏主意,TAB显然不是一个人的名字。但是,如果示例不同,您可以这样做。

public enum Name{
 John, Mary, 
 TAB { public String toString() { return "\n"; } };
}

答案 1 :(得分:2)

创建一个枚举:

public enum Name {
  John, Mary
}
public void example(Name name){
  test(name);
}

您还可以在枚举中添加方法,状态和构造函数:

public enum Name {
  John(23), Mary(20)

  private int age;

  private Name(int age) {
    this.age = age;
  }

  public int getAge() {
    return age;
  }
}

我发现我做了很多这样的事情。

因为我看到你现在已经添加了TAB,所以:

public enum Name {
  JOHN("John"), Mary("Mary"), TAB("\n")

  private int str;

  private Name(int str) {
    this.str = str;
  }

  public String toString() {
    return str;
  }
}

答案 2 :(得分:0)

字符串不能被子类化,因此您无法立即执行您想要的操作。

要么考虑使用ENUM,要么在构造函数中显式测试传递的字符串中的有效值,如果不可接受则抛出RuntimeException。

答案 3 :(得分:0)

我认为您的代码有错误,因为您传递了被调用的对象     名称 这是类型     名称 在示例中但是在测试中你得到一个字符串并且它从示例中获得了传递名称所以我不确定你要做什么。 你能详细说明吗?

答案 4 :(得分:0)

为什么不使用ENUM?

public enum Name{
    John, Marry
}

然后你可以编写像

这样的方法
public void example (Name name){
    test(name);
}