在Android中转换数据类型

时间:2010-11-25 04:17:35

标签: android oop inheritance casting

资源myResources = getResources();

CharSequence styledText = myResources.getText(R.string.stop_message); Drawable icon = myResources.getDrawable(R.drawable.app_icon);

int opaqueBlue = myResources.getColor(R.color.opaque_blue);

float borderWidth = myResources.getDemension(R.dimen.standard_border);

动画tranout = AnimationUtils.loadAnimation(this,R.anim.spin_shrink_fade);

String {} stringArray = myResources.getStringArray(R.array.string_array);

int [] intArray = myResources.getIntArray(R.array.integer_array);

资源myResources = getResources(); AnimationDrawable rocket =(AnimationDrawable)myResources.getDrawable(R.drawable.frame_by_frame);

我将最后几个陈述与前一个陈述进行比较。我的问题是为什么在上面的其他例子中显式转换AnimationDrawable时不需要强制转换?

2 个答案:

答案 0 :(得分:1)

因为AnimationDrawable延伸Drawable(间接)。

myResources.getDrawable会返回Drawable类型,必须投放该类型才能将其分配给AnimationDrawable类型。

基本上AnimationDrawableDrawable的一种类型,这意味着Drawable个变量可以指向Drawable类型及其子类型(包括AnimationDrawable) 。这不起作用,例如,您不能将Drawable类型分配给指向AnimationDrawable的变量,就像您无法将Drawable类型分配给a LevelListDrawable一样变量指向Drawable(另一种{{1}})。

有关详细信息,请参阅此页面: http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.html

此页面提供更多一般信息: http://www.javabeginner.com/learn-java/java-inheritance

答案 1 :(得分:0)

因为有很多类型的抽奖,取决于你要求你得到不同类型,所有都继承自通用drawable祖先。除非您只关心通用的Drawable方法和成员,否则您必须知道您要求的类型并将通用Drawable转换为该特定类型。