解决方案 »
- android Bitmap 生成 单色位的 bmp格式图片文件
- 一个很纠结的问题,希望大家帮下忙。谢谢了。。。。
- 开发pc套件 支持android手机,求思路
- 程序再也无法运行了。
- Android GestureDetector在flying监听事件中实现对当前页面的图片的刷新,怎么加上点特效呢?没有使用ViewFlipper?
- 90后IT崛起!!!!!!!!!!!我自己写的软件,大家要支持下啊!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ScrollView的嵌套使用?
- 安卓手机可以访问嵌入式服务器吗
- 如何获取在ActionBar中actionView的button控件的点击事件
- 疯狂android讲义第二章的例子,修改后有问题
- handler和Listview的数据更新问题
- 关于android一个程序运行时出现的错误:
即使()和 . 具有相同优先级,你看这个(Editable) super.getText()的运算顺序,()只作用在Editable上,然后super.getText(),如果你觉得是将super转为Editable那么应该是((Editable)super)。因为super后面有个 . 运算,这个和()有相同优先级,那么就应该()和 . 同时运算,那么就是super.getText()然后再强制转换。不知道这个有没有说清楚。
另外从代码上看,super.getText()是调用的TextView的getText()方法。而TextView的getText()方法返回的是一个CharSequence。再看Editable的源码,它继承了CharSequence。根据多态的性质,就可以将CharSequence转换为
Editable。
如果有用请给分,谢谢。
十分感谢!终于遇到高手啦,困扰了我好几天了,如果有用一定给分!而且弄懂了还要再加分!我现在明白了是要先处理后面的super.getText(),然后将返回的CharSequence对象进行强制转换,只不过有一点我还是不太懂,按照我的想法,super.getText()返回的应该是一个实现了CharSequence接口的类的实例吧?然后把这个实例强制转换为Editable接口,是这样吗?我做了个小实验:
interface A { }interface B extends A{ }class Implement_A implements A { }public class Src {
public static void main(String args[]) {
A a = new Implement_A();
B b = (B)a;
}
}
这里的接口A就相当于CharSequence,接口B就相当于Editable,B继承A,另外有一个类Implement_A实现了接口A,之后我在主函数中创建了接口A的对象a,并将其实例化(new Implement_A()),这个对象a就相当于前面Android源代码中super.getText()返回的CharSequence对象,然后我将这个对象a强制转换成接口B(就相当于Android源代码中强制转换为Editable),然后运行,出错,ClassCastException,也就是说好像不能这么强制转换,我感觉很奇怪,我这里的测试代码跟Android源代码中有什么区别吗
简单说下。你写的这个和Android源码里面的那个还是有区别的。你不能直接new一个接口的对象,必须实现接口的所有方法。所以你这个不是转型的错误。Android里面的那个getText()方法返回的是一个CharSequence,但这个是经过向上转型的。
MainPackage;interface A {
public void a();
}interface B extends A{
public void b();
}class Implement_A implements A {
public void a() {
System.out.println("test");
}
}public class Src {
public static void main(String args[]) {
A a = new Implement_A();
B b = (B)a;
}
}
这样也是ClassCastException,你说“是经过向上转型的”是什么意思?Android源代码中不是new一个接口对象的吗?那你觉得Android源代码里面大概是怎么实现的?可以给个例子吗?十分感谢!
interface A {
public void a();
}interface B extends A{
public void b();
}class Implement_A implements B {
public void a() {
System.out.println("test a");
}
public void b(){
System.out.println("test b");
};
}public class Src {
public static void main(String args[]) {
A a = new Implement_A();
B b = (B)a; // 现在可以随变转了
}
}应该是这样的,向上转型就是将子类转为父类型,调用它的方法时是调用的子类实现。
你写的Implement_A没有实现B,跟B没毛关系,所以不能转。建议看下上下转型,多态,继承,接口,实现等内容