1

我有和 Enum 用于我的意图 Extras 我喜欢在我的 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 方法,我的 EnumExtras.TITLE应该自动转换为 String "TITLE"

如果我像这样将它打印到屏幕上,它甚至可以工作

System.out.println("Extra="+Extras.TITLE); 

但是对于 Intent 方法,我收到错误消息:

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 ?

有没有办法在不调用 toString() 的情况下传递我的枚举?

更新:我试图改变我的枚举来实现 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

不,枚举是值。如果不调用方法,您将无法获取值。请参阅此处此处了解更多信息。JavaIntegerStringtoString()

于 2015-05-22T12:35:27.217 回答