Androidアプリで使用するのが好きなエクストラの目的のためのEnumがあります。型定義は次のように記述します。
public enum Extras { TITLE, ID_USER } // ... and some more Extras
私のコードでは、次のように Enum を使用するのが好きです。
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 メソッドがあることを知っているので、列挙型Extras.TITLE
は自動的に String にキャストされる必要があります"TITLE"
。
このように画面に印刷しても機能します
System.out.println("Extra="+Extras.TITLE);
しかし、インテント メソッドの場合、次のエラー メッセージが表示されます。
The method putExtra(String, CharSequence) in the type Intent is not applicable for the arguments (Extras, CharSequence)
次のように手動で列挙型を文字列に変換すると、このエラーを回避できます。
i.putExtra( Extras.TITLE.name() , "My Title String");
i.putExtra( Extras.TITLE.toString() , "My Title String");
しかし、Enum をこのメソッドにパラメーターとして渡すと、String が自動的に呼び出されない理由を知りたいです。
toString() を呼び出さずに列挙型を渡す方法はありますか?
更新: Enum を変更して CharSequence インターフェイスを実装しようとしました。この変更の後、パラメーターを必要とするメソッドに列挙型を渡すことができ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); }
}