首頁>Club>
3
回覆列表
  • 1 # 使用者3118304297260

    你寫的方法是ToString,而並非重寫的toString。

    java語言大小寫很敏感,這意味著大寫字母和小寫字母完全不同,也就表示,toSring不是ToString,另外呢,Eclipse和idea的社群版都是免費的,配置也不麻煩,而且功能全面,就不要再用這種文字編輯器了吧。

    Comparable介面是有泛型的,寫作Comparable<product>,這樣,你的compareTo的方法的引數就直接是product,不用在進行轉換了,並且根據Java的命名習慣,class product應該寫作class Product,類名稱的單詞首字母要大寫。

    TreeMap也是有泛型的,比較合適的寫法是:

    TreeMap<Product, Double> map = new TreeMap<>();

    這樣迭代器就可以寫作:

    Iterator<Product> it = keys.iterator();

    Product key = it.next();

    double value = map.get(key);

    這樣型別轉換就能省下很多,看起來也更加清晰。

    ---分割線---

    泛型,是指java的引數化型別,把型別作為引數進行傳遞的一種手法,例如,map裡面以什麼型別作為鍵,什麼型別作為值。

    在早期,java沒有泛型,因此map和list這些容器只能是Object,每次使用前後都要進行型別轉換,十分不便,而且如果型別轉換不正確,是會導致異常的,所以後來的java為了方便使用,透過泛型機制代替我們手工進行型別檢查和轉換,泛型要書寫在尖括號內,例如:

    public <T> T get(String str) {}

    在型別前多了一個<T> ,這個T就是泛型,那麼這個方法的含義就是指,返回的型別將會和使用者接收返回值的型別一致,T將會代表使用者接收的型別。

    public <T> void set(T object){}

    同樣是泛型,這裡是指與傳遞的Object的泛型作為T的型別。

    所以你應該可以看得出來,方法上泛型其實就是型別的推測,第一個可以根據接收的型別推測T,第二個可以根據引數的型別推測T。

    而另一種泛型是寫在類上面的,例如:

    class Test<T> {}

    這樣的class,整個class的內部都可以使用引數型別T來代替一個具體的型別(像是String,Integer,你的Product等),而list和set都是這樣做的。

    上文中compareable介面就使用了泛型,像是這樣:

    因此我們在使用的時候只需要把T換成自己的型別,那麼compareTo方法的那個T也會跟著改變,這就可以省去型別轉換的過程,使得整體看起來十分的簡介而明確。

  • 中秋節和大豐收的關聯?
  • 誰有寫音樂的林海的介紹?