Почему 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() метод. Смотрите здесь и здесь для получения дополнительной информации.

Другие вопросы по тегам