JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java SE 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Re:宣告泛型類別時不可以使用已存在的類別做為代號的問題 [Re:kentyeh]
weberhwang





發文: 45
積分: 0
於 2019-02-27 19:53 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不好意思
但看了很久還是沒能理解
第一個問題
1
2
3
4
5
6
7
8
9
10
11
//有一個類別A
class A { }
 
//宣告一個泛型類別Car,本來應該要用Car<T>的方式,但卻用成Car<A>,
//而A是實際存在的類別,故compile過不了是正常,
//但很奇怪的是,若把我 ★ 那行註解掉,compile就會過?這是為何?
public class Car2<A> {
  public static void main(String[] args){
    A a = new A(); //★
  }
}

以上面這例子而言,我自己的認知是「在宣告泛型類別時,不可以用 已存在的類別 做為 < > 裡面的代號」
例如,假如已存在一個叫Car的類別
那就想另外宣告一個TestCar的泛型類別時,就不能寫public class TestCar<Car>{.....}
必須寫成public class TestCar<X> {...} (X是一個不存在的類別,故可以拿來當代號)
上面這個認知不知是否有誤?

假如沒錯的話,接下來的問題就是,A是已存在的類別
public class Car2<A>{ ←光是這樣寫不就「應該」compile不過才對嗎? 為何反而註解掉★那行就能過了?這點就違返了我第一點的認知…還是搞不懂

}

第二個問題
1
2
3
4
5
6
//假如有一個叫Car的泛型類別
class Car<T,S>{ }
 
//這時另做了一個Tank類別去繼承Car,但卻把Car<T,S>寫成Car<B, B>卻仍能compile過,
//照說對Car而言兩個代號不是應該要不同的嗎?為何這樣會可以compile呢?如下
class Tank<A,B,C> extends Car<B,B>{ }


因為如大大說的,宣告類別時,T、S在之後實例化時,會是什麼,它目前不知道。
這時我就覺得,那不就直接寫class Car<T,T>就好了
但寫這樣卻compile又過不了,那到底視<T,T>為不合法,而視<T,S>為合法的理由又是為何?

甚至class Tank<A,B,C> extends Car<B,B>{ } 改成 class Tank<T,T,T> extends Car<T,T>{ }(←不合法的寫法) 但 差別又在那?因為總會說 現在又不確定它將來實例化會是放入什麼類別 syntactic sugar的效果 (<>會被擦掉)
那到底要區分代號有什麼「必要性」或「優點」我實在看不出來,
目前只知道 泛型類別在實例化時 會有檢核的功能,但在宣告泛型類別當下,這些代號有什麼檢核效果嗎?


weberhwang edited on 2019-02-27 20:00
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
646 宣告泛型類別時不可以使用已存在的類別做為代號的問題 weberhwang 497 2019-02-26 20:44
541 Re:宣告泛型類別時不可以使用已存在的類別做為代號的問題 kentyeh 243 2019-02-27 09:38
531 Re:宣告泛型類別時不可以使用已存在的類別做為代號的問題 clock 951 2019-02-27 17:09
521 Re:宣告泛型類別時不可以使用已存在的類別做為代號的問題 weberhwang 1170 2019-02-27 19:53
497 Re:宣告泛型類別時不可以使用已存在的類別做為代號的問題 kentyeh 524 2019-03-01 09:50
566 Re:宣告泛型類別時不可以使用已存在的類別做為代號的問題 javaX 97 2019-03-01 14:47
» JWorld@TW »  Java SE 討論區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8