[英]Getting child class name in super() constructor
我有兩個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()
。
是否有一些明智的設計?
如果需要在RdbmsTable
構造函數中使用該名稱,請在此使用RdbmsTable
this.getClass().getSimpleName().toUpperCase()
(而不是super
):
public RdbmsTable(String uri) {
this.uri = uri;
this.type = this.getClass().getSimpleName().toUpperCase();
}
getClass
始終為您提供實例的實際類 ,無論您從何處調用它。 因此,在上面的RdbmsTable
, RdbmsTable
this.getClass()
將為該實例實際是什么類返回Class
實例。 如果它是TeradataTable
實例,則this.getClass()
將返回對TeradataTable
(不是RdbmsTable
)的Class
的引用。
現場示例 :
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
但是我認為最好使用注釋或類似方法對此進行參數化,以防萬一您需要使用與類名不完全匹配的名稱。
那對你有用嗎?
public class TeradataTable extends RdbmsTable {
public TeradataTable(String uri) {
super(uri, TeradataTable.class.getSimpleName().toUpperCase());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.