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

问题描述 投票:0回答:1

我有和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方法,我的Enum Extras.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)

如果手动将枚举转换为String,我可以避免此错误,如下所示:

i.putExtra( Extras.TITLE.name()  , "My Title String");
i.putExtra( Extras.TITLE.toString()  , "My Title String");

但我想知道为什么当我将我的Enum作为参数传递给此方法时,自动调用String?

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

更新:我试图改变我的枚举来实现CharSequence接口。在这个修改之后,我可以将我的Enums传递给期望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); }
}
java tostring charsequence
1个回答
1
投票

不,EnumsJavaInteger值。如果不调用String方法,你不能得到toString()值。有关详细信息,请参阅herehere

© www.soinside.com 2019 - 2024. All rights reserved.