由于我的内存很差,我喜欢将数据对象的所有细节都放入枚举中,这样我就可以在IDE中使用代码完成,而不必一直引用来获取表名或字段名。通常,我会使用一些只包含枚举的类。
假设我有一个"域"(数据库源)"表"one_answers"字段"的表,看起来像这样:
public class DataObjectNames {
public enum Domains {
Domain1,
Domain2;
}
public enum Domain1Tables {
Customers,
Orders;
}
public enum Domain2Tables {
OrderItems,
Shipments;
}
public enum CustomerFields {
id,
email;
}
public enum OrderFields {
id,
customerId;
}
//fields for OrderItems and Shipments . . .
}
但假设我想做一些事情,比如:
Domain1.tables().Customers.fields(). //code completion supplies choices?
在我键入句点后,我希望自动完成可以在.id和.email之间进行选择,这与如果"fields"返回带有两个方法的对象,或者如果我只是键入CustomerFields。在IDE中。
为了实现这一点,在我看来,我需要返回的不是枚举的特定实例,而是枚举本身。我尝试过各种方法,比如
public enum Domains {
Domain1 {
@Override
public Enum<?> tables() {
return Domain1Tables.foo();
} //Is there a method that will return the enum itself?
},
Domain2 {
@Override
public Enum<?> tables() {
return Domain2Tables.foo();
};
public abstract Enum<?> tables();
}
当然,我还没能找到一个返回enum类本身的函数foo()。
有什么想法吗?
您不能用enum来实现这一点,因为Java的类模型不能以您需要的方式工作,从而使这种风格发挥作用。
我还没能找到一个返回枚举类本身的函数foo()
返回枚举类本身很容易,只需执行Domain1Tables.class
,但这不会给您想要的完成,因为它给您的是一个Class<Domain1Tables>
对象,而该对象没有名为Customers
和Orders
的字段。
您希望能够将"Domain1Tables"类视为对象,并将枚举常量(实际上是静态的最终字段)引用为该对象的成员,但Java根本无法做到这一点。
如果你放弃使用enum
,那么你可以简单地使用:
public class DataObjectNames {
public class Domains {
class Domain1 {
class Tables {
class Customers {
public static final String id = "id";
public static final String email = "email";
}
}
}
}
}
但在这种情况下,DataObjectNames.Domains.Domain1
将不再是一个有效的表达式(因为它引用的是类作用域,而不是对象
你想做的事情可能有一个解决方案,但如果没有更多的上下文,我可以提供比上面更多的细节。