我有和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);
因为我知道枚举有一个toString方法,我的枚举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)
如果手动将枚举转换为String,我可以避免此错误:
i.putExtra( Extras.TITLE.name() , "My Title String");
i.putExtra( Extras.TITLE.toString() , "My Title String");
但是我想知道为什么在我将Enum作为参数传递给此方法时会自动调用String issn`t?
有没有办法在不调用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); }
}