Discussion:
[問題] 請問marker interface
(时间太久无法回复)
Ted
2006-09-23 03:18:10 UTC
Permalink
請問我們可以使用marker interface嗎?

thx~

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.96.83
痞子軍團團長
2006-09-23 04:02:12 UTC
Permalink
※ 引述《tedhut (Ted)》之銘言:
: 請問我們可以使用marker interface嗎?
: thx~

根據 http://www.jguru.com/faq/view.jsp?EID=224126 的解釋(定義?)
我不知道為什麼不能用 or 你究竟要問什麼

--
 侃侃長論鮮窒礙  網站:http://www.psmonkey.idv.tw
 眾目睽睽無心顫  個人版:telnet://legend.twbbs.org
 煢居少聊常人事 
 殺頭容易告白難  歡迎參觀 Java 版(@ptt.cc)精華區 \囧/

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.192.183
Ted
2006-09-23 10:13:27 UTC
Permalink
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: ※ 引述《tedhut (Ted)》之銘言:
: : 請問我們可以使用marker interface嗎?
: : thx~
: 根據 http://www.jguru.com/faq/view.jsp?EID=224126 的解釋(定義?)
: 我不知道為什麼不能用 or 你究竟要問什麼

因為我也只看過那兩個mark interface~
Serializable和Cloneable~

他意思就是說~~mark interface啥麼都沒定義~~只是做分類用~~

阿譬如你要用clone~~就要得先implement Cloneable~~

可是照理講Cloneable應該裡面啥麼都沒寫啊~~

怎麼會不implement就會錯咧?

還是mark interface這種東西其實只是電腦在處理使用的~~
一般使用者不能自己寫呢??

如果自己能寫~~又該怎麼寫咧?不可能裡面全都是空的吧?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.10.152.58
※ 編輯: tedhut 來自: 124.10.152.58 (09/24 02:13)
遺憾太常。
2006-09-23 11:47:00 UTC
Permalink
clone物件是從 protected Object.clone()裡繼承下來的,
Cloneable裡沒有clone(),
Cloneable interface的用意,
在於提醒這個Class必須實做public Object clone(),
如果沒有實做clone(),
就要丟出一個CloneNotSupportedException 的Exception。

http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html

這玩意的重點在於改變Object的protected語法,
其實不是太漂亮的作法;
我自己盡量不用clone(),
大多都用static factory的方法解決clone的需要。


※ 引述《tedhut (Ted)》之銘言:
: ※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: : 根據 http://www.jguru.com/faq/view.jsp?EID=224126 的解釋(定義?)
: : 我不知道為什麼不能用 or 你究竟要問什麼
: 因為我也只看過那兩個mark interface~
: Serializable和Cloneable~
: 他意思就是說~~mark interface啥麼都沒定義~~只是做分類用~~
: 阿譬如你要用clone~~就要得先implement Cloneable~~
: 可是照理講Cloneable應該裡面啥麼都沒寫啊~~
: 怎麼會不implement就會錯咧?
: 還是mark interface這種東西其實只是電腦在處理使用的~~
: 一般使用者不能自己寫呢??
: 如果自己能寫~~又該怎麼寫咧?不可能裡面全都是空的吧?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 66.108.81.124
!H45
2006-09-24 04:42:24 UTC
Permalink
※ 引述《tedhut (Ted)》之銘言:
: ※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: : 根據 http://www.jguru.com/faq/view.jsp?EID=224126 的解釋(定義?)
: : 我不知道為什麼不能用 or 你究竟要問什麼
: 因為我也只看過那兩個mark interface~
: Serializable和Cloneable~
: 他意思就是說~~mark interface啥麼都沒定義~~只是做分類用~~
: 阿譬如你要用clone~~就要得先implement Cloneable~~
: 可是照理講Cloneable應該裡面啥麼都沒寫啊~~
: 怎麼會不implement就會錯咧?
: 還是mark interface這種東西其實只是電腦在處理使用的~~
: 一般使用者不能自己寫呢??
: 如果自己能寫~~又該怎麼寫咧?不可能裡面全都是空的吧?

考慮如下的程式碼

.A.java
public class A implements B {
public static void main(String argv[]) {
A obj = new A();
if (!(obj instanceof B)) {
System.err.println(obj + "doesn't implement B");
}
}
}

.B.java
public interface B {}

雖然 B 介面沒有任何方法
但是 A 類別實作了 B ,所以我們可以使用 if (obj instanceof B)
來檢查 A 是否實作了 B

這樣就達成了 mark interface 的功能

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85

Loading...