2010-04-14 121 views
1

我希望能够创建一个像String对象一样创建的对象,并在创建时验证String值是否是一个适当的选项。如何创建使用字符串类型行为进行创建的对象?

I.E. SpecificString可以是“Bob”或“Jim”。

SpecificString BadName =“Sam”//引发异常 SpecificString GoodName =“Bob”//不抛出异常。

最重要的功能是当它被访问时它必须在访问时像一个字符串一样行为。

printf(SpecificString); //输出Bob。

这可能吗?

+0

增加了一些更多的规范。当我调用printf(SpecificString)时,它应该像字符串一样输出。 – 2010-04-14 14:48:50

回答

2

如前所述,使用=运算符是不可能的。

对于printf(SpecificString)你应该重写Object.toString()

@Override 
public String toString(){ 
    //return a String representation of the Object; 
} 
+0

太棒了!的toString()。听起来不错。 – 2010-04-14 23:03:14

1

编辑:哎呀,认为这是一个C#问题入手:)

Java不允许用户定义的转换,所以这是不会的,你已经证明的方式来工作。您需要一个静态的Parse方法或构造函数或类似的东西。

如果只有某些允许的值,您可以使用枚举吗?

1

如果我正确理解你的观点,你想确保给定的对象是一个字符串限于一组特定的可能值。

我会去为Enums,在这种情况下。如果您使用的是最新的Java版本,则只需使用标准Enums,或者汇总可能更适合您的特定问题的“旧”DIY版本。

对于后者的例子,看到this

2

你可能想用这个的enum。 Enums是在1.5版本中引入Java的。你可以在官方文档here中阅读。

如果出于某种原因,您无法使用Java 1.5,则Apache commons-lang库具有相当好的替代性。

2

如果问题是它可以创建像一个字符串又名。 String s =“foo”答案是否定的。只有字符串可以这样构造,并且字符串是最终的,因此您将无法为其定义子类...

如果您寻找从给定Set创建字符串的最佳方法,那么您可以使用StringFactory或看看其他答案...

0

你不能。但是,如果你能做到这一点,就不可能区分一个正常的归属和一个抛出异常的异常(假设你的异常没有被选中)或者对归因做任何事情。 使用一个方法调用你会向使用你的类的某人证明存在一些验证,并且在Eclipse中我可以看到这个验证是用ctrl + click单击的。