Java 如何创建使用字符串类型行为进行创建的对象?

Java 如何创建使用字符串类型行为进行创建的对象?,java,oop,string,Java,Oop,String,我希望能够创建一个像字符串对象一样创建的对象,并在创建时验证字符串值是否是合适的选项 即,SpecificString可以是“Bob”或“Jim” SpecificString BadName=“Sam”//Throws异常 SpecificString GoodName=“Bob”//不会引发异常 最重要的功能是,当访问它时,它的行为必须像字符串一样 printf(SpecificString);//鲍勃 这可能吗?编辑:哎呀,我还以为这是个C#问题呢:) Java不允许用户定义的转换,因此这

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

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

SpecificString BadName=“Sam”//Throws异常 SpecificString GoodName=“Bob”//不会引发异常

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

printf(SpecificString);//鲍勃


这可能吗?

编辑:哎呀,我还以为这是个C#问题呢:)

Java不允许用户定义的转换,因此这不会以您所展示的方式工作。您需要一个静态
解析
方法或构造函数,或类似的东西


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

EDIT:Oops,认为这是一个C#问题:)

Java不允许用户定义的转换,因此这不会以您所展示的方式工作。您需要一个静态
解析
方法或构造函数,或类似的东西


如果只允许某些值,您可以使用枚举来代替吗?

如果我正确理解您的观点,您希望确保给定对象是一个仅限于特定可能值集的字符串

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


关于后一种方法的示例,请参见

如果我正确理解了您的观点,您需要确保给定对象是一个限制为特定可能值集的字符串

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


有关后一种方法的示例,请参见

,您可能需要为此使用
枚举。枚举是在1.5版中引入Java的。您可以在官方文档中阅读有关它们的信息


如果由于某种原因,您无法使用Java 1.5,Apache库有一个相当好的替代品。

您可能需要使用
enum
。枚举是在1.5版中引入Java的。您可以在官方文档中阅读有关它们的信息

如果由于某种原因,您无法使用Java 1.5,Apache库有一个相当好的替代品。

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

如果您正在寻找从给定集合创建字符串的最佳方法,您可以使用StringFactory或查看其他答案…

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


如果您正在寻找从给定集合创建字符串的最佳方法,您可以使用StringFactory或查看其他答案…

正如前面所说,使用
=
运算符是不可能的

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


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

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


你不能。但是,如果您能够做到这一点,就不可能区分正常的atribution和抛出异常的atribution(假设您的异常未被选中),或者对atribution执行任何操作。
使用方法调用,您将向使用您的类的人表明存在某些验证,在Eclipse中,我可以通过按住ctrl键并单击来查看此验证是什么。

您不能。但是,如果您能够做到这一点,就不可能区分正常的atribution和抛出异常的atribution(假设您的异常未被选中),或者对atribution执行任何操作。
使用方法调用,您将向使用您的类的人表明存在一些验证,在Eclipse中,我可以通过按住ctrl键并单击来查看此验证是什么。

添加了更多的规范。当我调用printf(SpecificString)时,它应该像字符串一样输出。当我调用printf(SpecificString)时,它应该像字符串一样输出。
@Override
public String toString(){
    //return a String representation of the Object;
}