Re: [問題] 自訂型別的習慣
It's an anti-pattern
簡而言之 你想做到 C/C++ typedef 的功能
但是用了一個不全等於typedef的東西
可能的問題:
如果有個 method f 長的像這樣
void f(Tuple t){...}
那麼將不能傳HashMap<String,String>這個type的物件給這個method
所以這兩個是不能互換的(和typedef不同)
影響到的是所有會呼叫 f 的地方
所以下面的文章中提到這個anti-pattern有傳染性(contagious)
懶得打太多
詳細看這
http://www.ibm.com/developerworks/java/library/j-jtp02216/index.html
※ 引述《chen1025 (小陳)》之銘言:
: 各位會常在較複雜的資料型別上定義一個新的資料型別嗎?
: 例如,從資料庫讀取每一筆資料,
: 都每一筆資料的屬性和值,都用HashMap的資料結構
: 但是每次寫
: HashMap<String,String> myTuple=new HashMap<String,String>
: 感覺有點冗長
: 所以定義了一個資料結構
: class Tuple extends HashMap<String,String>{
: }
: 如果要存取整個資料庫,就在定義一個資料結構
: class DB extends ArrayList<Tuple>{
: }
: 如果要用的時候,就寫成
: DB myDB=new DB();
: Tuple myTyple=new Tuple();
: myDB.add(myTuple);
: 這樣子寫有問題嗎?
: 另外還有,如果物件名稱和類別名稱用同一個相同的名稱,
: 是否會產生問題?
: 也就是
: Tuple Tuple=new Tuple();
: 這樣子寫法編譯器也會過,但是不知道會不會日後執行有錯誤?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.189.122
討論串 (同標題文章)