枚举内的枚举 [英] Enum within enum

查看:106
本文介绍了枚举内的枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在java中为sql查询的枚举中创建一个枚举。例如我想说 table.create ,它将返回CREATE TABLE或 database.create ,它将返回CREATE数据库。如何做到这一点?

I want to create an enum within an enum for sql query in java. For example I want to say table.create and it would return CREATE TABLE or database.create and it would return CREATE DATABASE. How can I do this?

enum SQL {
    table("ALTER,CREATE"),
    database("CREATE");
}


推荐答案

一个枚举?

Table.java

Table.java

public enum Table {
    CREATE("CREATE TABLE"),
    ALTER("ALTER TABLE");

    private String cmd;

    Table(String cmd) {
       this.cmd = cmd;
    }

    @Override
    public String toString() {
        return cmd;
    }
}

Database.java

Database.java

public enum Database {
    CREATE("CREATE DATABASE");

    private String cmd;

    Database(String cmd) {
       this.cmd = cmd;
    }

    @Override
    public String toString() {
        return cmd;
    }
}

有了这个例子,系统.out.println(Table.CREATE); 打印 CREATE TABLE

也将帮助可读性,因为您可以生成如下代码:

This will also aid in readabilty becuase you can produce code like:

String query = Table.CREATE + "(Column1 " + DbType.INTEGER + " " + Column.UNIQUE + " " + Column.PRIMARY_KEY + ")";

IMO将会更容易阅读和理解。

Which would be a bit easier to read and understand, IMO.

编辑

要尝试接近你以后可以做的事情:

To attempt to get close to what you're after you could do something like:

public enum SQL {
    TABLE("TABLE", SQL.CREATE_FLAG | SQL.ALTER_FLAG),
    DATABASE("DATABASE", SQL.CREATE_FLAG);

    public static final int CREATE_FLAG = 1;
    public static final int ALTER_FLAG = 2;

    public static final String CREATE_STRING = "CREATE";
    public static final String ALTER_STRING = "ALTER";

    public static final String INVALID = "INVALID";

    private String name;
    private boolean create;
    private boolean alter;

    SQL(String name, int flags) {
        create = (flags & CREATE_FLAG) != 0;
        alter = (flags & ALTER_FLAG) != 0;

        this.name = name;
    }

    public String create() {
        if (create)
            return CREATE_STRING + " " + name;
        else
            return INVALID;
    }

    public String alter() {
        if (alter)
            return ALTER_STRING + " " + name;
        else
            return INVALID;
    }
}

您可以在哪里打电话:

System.out.println(SQL.TABLE.create());    // CREATE TABLE
System.out.println(SQL.TABLE.alter());     // ALTER TABLE
System.out.println(SQL.DATABASE.alter());  // INVALID
System.out.println(SQL.DATABASE.create()); // CREATE DATABASE

这篇关于枚举内的枚举的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆