2013-06-01 53 views
1

C#我可以將一個類的名稱分配給一個像這樣的本地靜態變量。在靜態構建過程中獲取類的名稱

public class MyClass 
{ 
     private static string TAG = typeof(MyClass).Name; 
} 

我發現這非常有用,因爲如果類被重構爲其他名稱,字符串的值會自動更新。方便標記調試消息等。

是這樣的可能在Java

public class MyClass 
{ 
     private static String TAG = ????; 
} 

我知道我可以使用getClass().getName()但那需要一個對象的引用。有沒有辦法在靜態變量上做到這一點?

+0

刪除'[c#]'作爲答案將不會有任何關係與C# –

+0

@PeterLawrey答案贏得'這個問題與它有關。 –

+0

@newStackExchangeInstance我假設你正在尋找c#時,你會更喜歡關於c#的答案,而不是那些對c#有傳遞引用的問題,而不是回答。 –

回答

5

您不需要將字段的名稱分配給字段而不是寫入。

MyClass.TAG 

你可以寫

MyClass.class.getName(); 

如果你真的需要,你可以分配給這個標籤,但我不明白這一點。

+0

這就是訣竅,謝謝。 – cgTag

2

一個小竅門也可以不需要類名事先的編程知識:

public class MyClass 
    { 
    private static String TAG = 
     new Object() { }.getClass().getEnclosingClass().getName(); 
    } 

這招使用嵌套匿名Object子類來獲得執行上下文的保持。它有一個複製/粘貼安全的好處,以克隆你的代碼在不同類別的情況下...

+0

這非常聰明。如果MyClass是抽象的,這將允許TAG保存派生類的名稱嗎? – cgTag

+0

不幸的是沒有。人們必須在每個派生類中可能需要的地方複製這段代碼...... –