[英]Why toString is not called for functions parameter?
我有Enum和我想要在我的Android應用程序中使用的其他功能。 類型定義是這樣寫的:
public enum Extras { TITLE, ID_USER } // ... and some more Extras
在我的代碼中,我喜歡這樣使用枚舉:
Intent i = new Intent();
i.putExtra( Extras.TITLE , "My Title String");
i.putExtra( Extras.ID_USER, 5);
和
String title = i.getStringExtra(Extras.TITLE);
int userId = i.getIntExtra(Extras.ID_USER, -1);
據我所知,枚舉有一個toString方法,我的Enum Extras.TITLE
應該自動轉換為字符串"TITLE"
。
如果我將它打印到屏幕上,它甚至可以工作
System.out.println("Extra="+Extras.TITLE);
但是對於意圖方法,我會收到錯誤消息:
The method putExtra(String, CharSequence) in the type Intent is not applicable for the arguments (Extras, CharSequence)
如果將枚舉手動轉換為String,我可以避免此錯誤:
i.putExtra( Extras.TITLE.name() , "My Title String");
i.putExtra( Extras.TITLE.toString() , "My Title String");
但是我想知道為什么當我將Enum作為參數傳遞給此方法時,為什么會自動調用String issn`t嗎?
有沒有辦法傳遞我的枚舉而不調用toString()嗎?
更新:我試圖更改我的枚舉以實現CharSequence接口。 修改之后,我可以將Enums傳遞給需要CharSequence
參數的方法。 但是它仍然與String方法不兼容。
public static enum Extras implements CharSequence { TITLE, ID_USER; // ... and some more Extras
@Override public char charAt( int index ) { return this.toString().charAt(index); }
@Override public int length() { return this.toString().length(); }
@Override public CharSequence subSequence( int start, int end ) { return this.toString().subSequence(start, end); }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.