我有两个Java类TeradataTable
和RdbmsTable
-
RdbmsTable.java
public class RdbmsTable {
public RdbmsTable(String uri, String type) {
this.uri = uri;
this.type = type;
}
TeradataTable.java
public class TeradataTable extends RdbmsTable {
public TeradataTable(String uri) {
super(uri, "TERADATATABLE");
}
我需要在super()
构造函数中以大写形式设置className。我不想使用硬编码的字符串。
我无法在this.getClass().getSimpleName().toUpperCase();
中使用super()
。
有什么东西可以让设计明智吗?
答案 0 :(得分:3)
如果您需要在RdbmsTable
构造函数中使用该名称,请在那里使用this.getClass().getSimpleName().toUpperCase()
(而不是super
):
public RdbmsTable(String uri) {
this.uri = uri;
this.type = this.getClass().getSimpleName().toUpperCase();
}
getClass
始终为您提供实例实际课程,无论您从何处调用它。因此,在上面的RdbmsTable
中,this.getClass()
将返回实例实际所在的任何类的Class
实例。如果它是TeradataTable
个实例,则this.getClass()
会返回Class
TeradataTable
的引用(不是RdbmsTable
)。
class Example
{
public static void main (String[] args) throws java.lang.Exception
{
new TeradataTable("foo");
}
}
class RdbmsTable {
public RdbmsTable(String uri) {
System.out.println(this.getClass().getSimpleName().toUpperCase());
}
}
class TeradataTable extends RdbmsTable {
public TeradataTable(String uri) {
super(uri);
}
}
输出:
TERADATATABLE
但是我认为最好使用注释或其他类似参数化,以防您需要使用不符合完全匹配的名称某个时候的班级名称。
答案 1 :(得分:0)
这会对你有用吗?
public class TeradataTable extends RdbmsTable {
public TeradataTable(String uri) {
super(uri, TeradataTable.class.getSimpleName().toUpperCase());
}