我希望能够创建一个像String对象一样创建的对象,并在创建时验证String值是否是合适的选项。
即。 SpecificString可以是“Bob”或“Jim”。
SpecificString BadName =“Sam”//抛出异常 SpecificString GoodName =“Bob”//不抛出异常。
最重要的功能是,当访问它时,它必须在访问时表现得像一个字符串。
的printf(SpecificString); //输出Bob。
这可能吗?
答案 0 :(得分:2)
您可能想要使用enum
。枚举在1.5版本中引入了Java。您可以在官方文档here中了解它们。
如果由于某种原因,您无法使用Java 1.5,那么Apache commons-lang库有一个相当不错的替代品。
答案 1 :(得分:2)
如果问题是,它可以像String一样创建。 String s =“foo”答案是否定的。只有字符串可以这样构造,字符串是最终的,所以你将无法为它定义一个子类......
如果您寻找从给定Set创建字符串的最佳方法,您可以使用StringFactory或查看其他答案......
答案 2 :(得分:2)
如前所述,使用=
运算符是不可能的。
对于printf(SpecificString)
,您应该覆盖Object.toString()
:
@Override
public String toString(){
//return a String representation of the Object;
}
答案 3 :(得分:1)
编辑:哎呀,认为这是一个C#问题,开头:)
Java不允许用户定义的转换,因此这不会以您显示的方式工作。您需要一个静态Parse
方法或构造函数,或类似的东西。
如果只允许某些值,您可以使用枚举吗?
答案 4 :(得分:1)
如果我理解你的观点,你要确保给定的对象是一个限于一组特定可能值的字符串。
在这种情况下,我会选择Enums。如果您使用的是最新的Java版本,请使用标准枚举,或者汇总可能更适合您特定问题的“旧”DIY版本。
有关后者的示例,请参阅this
答案 5 :(得分:0)
你做不到。但是如果你能做到这一点,就不可能区分正常的归因和抛出异常(假设你的异常未经检查)或者在归因上做任何事情。 使用方法调用,你会向使用你的类的人明确表示存在某些验证,而在Eclipse中我可以通过ctrl + click看到这个验证是什么。