为什么没有为函数参数调用toString?

时间:2015-05-22 12:30:26

标签: java tostring charsequence

我有和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); }
}

1 个答案:

答案 0 :(得分:1)

不,EnumsJava的值为Integer。如果不调用String方法,则无法获取toString()值。有关详细信息,请参阅herehere

相关问题