这个 class 是如何工作的,或者如何使用它?

How does this class work or how can you use it?

我摔倒在 class 上,看起来像这样:

public final class DatabaseType{

    public static final DatabaseType TYPE_LIMITED_TEXT = new DatabaseType();
    public static final DatabaseType TYPE_UNLIMITED_TEXT = new DatabaseType();
    public static final DatabaseType TYPE_DATE = new DatabaseType();
    public static final DatabaseType TYPE_DECIMAL = new DatabaseType();

    private DatabaseType(){
    }

    public String toString(){
        return "DatabaseType";
    }
}

我需要设置类型,但我想了解这里发生了什么,但我不知道 class 是如何工作的。 无论我使用什么变量,它总是 return 一个空的数据库类型,没有任何信息。所以我想知道如何使用这样的 class。也许这种类型有一个名字class?

基本上,class 列出了四个可枚举常量,您可以像这样在方法签名中使用它们

public DatabaseType getTypeOfDB();

在客户端代码中,您将有一种类型安全的方法来比较常量:

if (getTypeOfDB() == DatabaseType.TYPE_LIMITED_TEXT) {
    doSomething();
}

尽管实现看起来有点笨拙,但正如 Gimby 在评论中指出的那样,它非常接近地模拟了 Java 5 enum。设计中的好点子如下:

  • 构造函数是private,意味着只有在class中声明的public static final DatabaseType个实例可以存在
  • class 是 final,因此您无法通过在子 class
  • 中添加更多常量来解决上述限制
  • class 中的常量字段具有 强类型 ,即它们不是 int,而是 DatabaseType,这有助于消除客户端代码
  • 中由拼写错误或 "magic numbers" 引起的错误

做同样事情的现代方法是改用枚举:

public enum DatabaseType {
    TYPE_LIMITED_TEXT, TYPE_UNLIMITED_TEXT, TYPE_DATE, TYPE_DECIMAL;
}

如果您调用函数 toString(),您将始终获得字符串:DatabaseType。 据我了解,您想 return 您创建的 DatabaseType 变量的名称。


创建一个变量private String name;并像这样修改构造函数:

private DatabaseType(String name){
    this.name = name;
}

同时创建一个函数

public String getName(){
    return this.name;
}

最后,当您创建 databaseType 对象时,请按如下方式创建它:

public static final DatabaseType TYPE_LIMITED_TEXT = new DatabaseType("TYPE_LIMITED_TEXT");