Почему toString не вызывается для параметра функции?
У меня есть и 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);
как я знаю, у enums есть метод toString, мой Enum Extras.TITLE
должен быть автоматически приведен к строке "TITLE"
,
Это даже работает, если я распечатаю это на экран, как это
System.out.println("Extra="+Extras.TITLE);
Но для Intent Methods я получаю сообщение об ошибке:
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");
Но мне нравится знать, почему String не вызывается автоматически, когда я передаю свой Enum в качестве параметра этому методу?
Есть ли способ передать мои Enums без вызова 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); }
}
1 ответ
Нет, перечисления в Java
являются Integer
ценности. Вы не можете получить String
значение без вызова toString()
метод. Смотрите здесь и здесь для получения дополнительной информации.