如何创建使用String类型行为进行创建的对象?

时间:2010-04-14 13:54:21

标签: java oop string

我希望能够创建一个像String对象一样创建的对象,并在创建时验证String值是否是合适的选项。

即。 SpecificString可以是“Bob”或“Jim”。

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

最重要的功能是,当访问它时,它必须在访问时表现得像一个字符串。

的printf(SpecificString); //输出Bob。

这可能吗?

6 个答案:

答案 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看到这个验证是什么。