2013-04-08 53 views
3

如果一個類實現了一個接口,如何在沒有完全限定的包的情況下獲得類實現的名稱?如何從帶有接口引用的類中獲取簡單的類名?

interface HasText; 
class Base extends HasText; 

List<HasText> texts; 

for (HasText text : texts) { 
    //Error: The method getSimpleName() is undefined for the type Class<capture#1-of ? extends HasText> 
    Sysout(text.getClass().getSimpleName()); 

    //prints: my.package.to.Base 
    Sysout(text.getClass().getName()); 
} 

如何在沒有包聲明的情況下只輸出'Base'作爲輸出?

+6

['Class.getSimpleName()'](http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getSimpleName())應該適用於所有'Class'對象,不管它是否來自「接口類型」或不是。 – 2013-04-08 11:14:15

+0

是的,'text.getClass()。getSimpleName()'應該編譯好。 – 2013-04-08 11:16:17

+0

問題可能在代碼中的其他地方。獲得更多的上下文將會有所幫助。 – NilsH 2013-04-08 11:16:56

回答

3

如果您正在使用的GWT SDK> 2.4即2.5.xClass.getSimpleName()現在supports

+0

其實,[相關提交](https://gwt-review.googlesource.com/#/c/2220/)仍在審覈中,所以沒有任何內容尚未落實(不幸)。 – 2013-04-08 13:11:56

+0

@AndreaBoscolo感謝您的更新Andrea.When我們能期待嗎? – 2013-04-08 13:31:06

+0

我不是gwt提交者,所以我不能說,但補丁集似乎非常簡單。我想這只是一個提交相關性的問題。與此同時,應該可以將該補丁應用於本地gwt git repol,或超級源代碼'user/super/com/google/gwt/emul/java/lang/Class.java'。 – 2013-04-08 19:54:04

3

因此,作爲本應在一般的工作,我只是想出了以下解決方法:

String name = text.getClass().getName(); 
name = name.substring(name.lastIndexOf(".") + 1); 

評論,如果我可能做的更好......

相關問題