簡體   English   中英

為什么不為函數參數調用toString?

[英]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); }
}

不, Java中的EnumInteger值。 不調用toString()方法就無法獲取String值。 有關更多信息,請參見此處此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM