由于我的内存很糟糕,我喜欢把所有数据对象都放入枚举中,所以我可以在IDE中使用代码完成,而不必继续引用以获取表的名称或者字段的名称。通常我会使用某种类型的只包含枚举的类来实现此目的。
假设我有“域名”(数据库源)“表格”和“字段”表,看起来像这样:
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();
}
但当然我无法找到返回枚举类本身的函数foo()。
有什么想法吗?
答案 0 :(得分:0)
您无法通过枚举执行此操作,因为Java的类模型不能按照您需要的方式工作,以便使用此样式。
我还没有能够找到一个返回枚举类本身的函数foo()。
返回枚举类本身很简单,只需执行Domain1Tables.class
,但这不会给你完成所需的功能,因为它给你的是一个Class<Domain1Tables>
对象,那个对象没有名为Customers
和Orders
的字段。
你希望能够对待&#34; Domain1Tables&#34;类就好像它是一个对象并引用枚举常量(它们实际上是静态的最终字段),好像它们是该对象的成员一样,但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
不再是一个有效的表达式(因为它引用了类范围,但没有引用到对象。
这可能是您尝试做的事情的解决方案,但如果没有更多背景信息,我可以提供比上述内容更多的详细信息。