1

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); }
}
4

1 に答える 1

1

いいえ、列挙型は値ですJava。メソッドを呼び出さないと値をInteger取得できません。詳細については、こちらこちらを参照してください。StringtoString()

于 2015-05-22T12:35:27.217 に答える