作者liu2007 (薯)
看板java
标题Re: [问题] 将callback转型成原本的class
时间Mon Oct 14 12:41:01 2013
※ 引述《bleed1979 (十三)》之铭言:
: 可恶,我的国文开始烂了。
: 原po的意思是指
: List<String> list = new ArrayList<String>();
: 和
: ArrayList<String> al = new ArrayList<String>();
: 吗??
: 还是请原po举几个例子??
Public class A {
private String mName;
private int mAge;
public A(String name , int age){
//略
}
public get(){
//略
}
public set(){
//略
}
public void print(){
//print something
}
我想要强调的是这个Class A 有public 的 getter & setter
今天我预设之下把Class A 的instance pointer 给某个Class B 使用是允许的。
可是很不巧某个Class C 也会用到 Class A 的某些public method 或是额外的东西,
只不过这个Class C 我不希望他会去使用到Class A 的 getter & setter,也就是说我不
希望Class C 透过 getter & setter动到我 Class A 的某些东西。
我过去要完成这样的想发都是先写一个 interface
public interface SpecialCallback{
public void doSomethingSpecial();
}
然後
public class A implements SpecialCallback{
//略
}
在 Class C 里面藏一个 field
public class C {
private SpecialCallback mCallback;
public C (SpecialCallback callback){
this.mCallback = callback;
}
public void method(){
.
.
mCallback.doSomethingSpecial();
.
.
}
}
然後 new C的时候把 A 的instance pointer带进去
我的问题在於说如果Class C知道SpecialCallback 所带进来的东西是Class A
cast一下,那我前面写的东西不就做白工了...??
//-----------------------------------------------------------------------
不过昨天我有找到另外一种方法
在 Class A写一个 getCallback()
然後在里面new 一个Specialcallback 并实做完再return 回去
new Class C 的时候喂的是 instanceA.getCallback()就好了
不晓得这个方法是否正确?
希望我描述的够清楚@_@
--
If a child on the street who has nothing is willing to share,
why are we who have everything still so greedy?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 106.1.108.108
※ 编辑: liu2007 来自: 106.1.108.108 (10/14 12:44)
1F:推 LPH66:"如果 Class C 知道" 所以不要让 Class C 知道就好啦 10/14 12:53
2F:→ LPH66:是说这不就是你的 interface 所想做的事吗.... 10/14 12:54
3F:→ LPH66:再说为什麽 Class C 会知道那其实是 Class A 呢? 10/14 12:56
4F:推 PsMonkey:推楼上... 如果想恶搞的话,API 根本无法设计了阿 XD 10/14 13:04
5F:→ swpoker:版上有人讨论过了 10/14 13:22
6F:→ swpoker:Killercat □ [J2SE] 谈谈Service的设计 10/14 13:26
7F:→ swpoker:为啥A会有public的方法呢? 10/14 13:38
8F:→ Chikei:想恶搞的话,同个JVM内根本没办法防吧XD 看这精美的反射API 10/14 15:05
9F:→ swpoker:has and not is!使用bridge吧 10/14 17:44