作者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)
推 LPH66:"如果 Class C 知道" 所以不要讓 Class C 知道就好啦 10/14 12:53
→ LPH66:是說這不就是你的 interface 所想做的事嗎.... 10/14 12:54
→ LPH66:再說為什麼 Class C 會知道那其實是 Class A 呢? 10/14 12:56
推 PsMonkey:推樓上... 如果想惡搞的話,API 根本無法設計了阿 XD 10/14 13:04
→ swpoker:版上有人討論過了 10/14 13:22
→ swpoker:Killercat □ [J2SE] 談談Service的設計 10/14 13:26
→ swpoker:為啥A會有public的方法呢? 10/14 13:38
→ Chikei:想惡搞的話,同個JVM內根本沒辦法防吧XD 看這精美的反射API 10/14 15:05
→ swpoker:has and not is!使用bridge吧 10/14 17:44