[问题] 如何帅帅地 downcast ?

楼主: pttnews (PTT新闻)   2015-08-11 10:18:13
起因我想要继承某个api framework, 替他增加某些Method, 但是现在做不下去,
所以做一个testcase,
如果我先upcast, 然后要用到ring再downcast, 可以成功, 但是我不喜欢这作法
phone pp = (phone) new android();
pp.run();
((android)pp).ring();
我想要这样做 ,但是在 b= (android)new phone(); 这一行,
会出现 java.lang.ClassCastException: phone cannot be cast to android
android b= (android)new phone();
b.run();
b.ring();
请问版上高手, 如何帅帅地向下转型?
原始马
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class extend {
@Test
public void extendDownCast(){
android b = new android();
if (b instanceof phone) {
b= (android)new phone();
b.ring();
}
}
}
class phone {
public void run() {
System.out.print("run");
}
@Override
public boolean equals(Object o) {
if(!(o instanceof phone)) return false;
return true;
}
}
class android extends phone {
public void ring() {
System.out.print("ring");
}
}
作者: ssccg (23)   2015-08-11 10:29:00
new phone()就是new了一个phone,怎么会是downcast除非你还有其他种phone,不然一直用android不就好了android就继承了phone了,可以run()啊
作者: swpoker (swpoker)   2015-08-11 10:43:00
父不父,子不子,怎么看都乱伦阿
作者: realmeat (真肉)   2015-08-11 10:55:00
推乱伦 XD
作者: swpoker (swpoker)   2015-08-11 11:38:00
父 物件=new 子()phone没有ring吗?我觉得OO的很怪阿?继承或动态都不是干脆你用annotation好了
作者: ssccg (23)   2015-08-11 13:00:00
你全程变量类型都用android有问题? android有ring怎么会挂原本需要phone的地方直接传android object进去也不用castandroid is phone, phone is not androidcast只是转reference型态,object new的时候是什么就是什么
作者: ckvir (ckvir)   2015-08-11 14:36:00
应该要这样吧Doc d = new Paper()d = jsoup. parse(... )Paper p = (Paper) dp. newM()
作者: cowbaying (是在靠北喔)   2015-08-11 16:00:00
要不要弄个接口去继承phone 然后再实作ring?
作者: ssccg (23)   2015-08-11 17:02:00
回传回来的就是Document不是Paper,只能写个东西去转换Paper p = new Paper(doc),然后自己把field copy过去通常是把Paper做成wrapper(你说的doc当成member)但是一定要维持type是Document的话工也满大的
作者: qrtt1 (有些事,有时候。。。)   2015-08-11 17:57:00
别傻的 copy 啊,IDE 有 generate delegate methods 啊https://www.youtube.com/watch?v=l0cecpSHRkE
作者: ssccg (23)   2015-08-11 18:25:00
看了一下jsoup source,parse可以传Parse进去,Parse是用TreeBuilder,然后Document是在initialiseParse new的也可以subclass TreeBuilder把doc的type换掉再拿来用
作者: swpoker (swpoker)   2015-08-13 10:27:00
(BXX)((Object)a)

Links booklink

Contact Us: admin [ a t ] ucptt.com