亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在新變量聲明中覆蓋方法

在新變量聲明中覆蓋方法

喵喔喔 2023-05-10 17:21:32
在處理一個項目時,我遇到了以下代碼段,它似乎提供了代碼,完全包含在一個新的變量聲明中,它似乎覆蓋了一個方法。我以前遇到過這種形式的代碼,但不可否認,我并不完全理解它。如果有人能解釋此代碼所基于的編程機制,我將非常感激。特別是,何時允許在變量聲明中使用此類重寫方法。還有哪些其他類型的數據結構允許這種行為?什么時候編寫這種性質的代碼比較有利?為什么不覆蓋變量聲明之外的方法?tempRequests.sort(new Comparator<Integer>() {               @Override    public int compare(Integer integer1, Integer integer2)     {                   return integer1.compareTo(integer2);            }});
查看完整描述

2 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

還有哪些其他類型的數據結構允許這種行為?


-> 您可以通過實現接口 Comparable 對對象進行排序。例如:


 public class Car implements Comparable<Car> {

     private String name;

     @Override

     public int compareTo(Car b) {

     return name.compareTo(b.name);

      }

    }

->您也可以在內部類中使用沒有覆蓋方法比較的比較器。


public class Car implements Comparator<Car> {

     private String name;

     private double price;

     @Override

     public int compare(Car b1, Car b2) {

     return b1.price - b2.price;

      }

    }

什么時候編寫這種性質的代碼比較有利?為什么不覆蓋變量聲明之外的方法?


-> 想象一下,在使用按名稱對對象 Car 進行排序后,您想按其他方式(如按價格、按重量)進行排序。當您想在不同時間以不同方式對對象進行排序時,如何做到這一點?我們在內部類中使用 Comparator 和 define 來做到這一點。


*此外,Comparator 是一個功能接口,因為它是唯一要實現的抽象方法。您可以在一行代碼中使用時髦的語法重寫:例如:


Compareator<Car> byPrice = (b1,b2) -> b1.price - b2.price;


查看完整回答
反對 回復 2023-05-10
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

這個機制已經在評論中得到了很好的解釋。順便說一句:自 Java 8 以來,這種匿名類的用法被認為有些過時,因為它可以用簡單的 Lambda 表達式代替:

tempRequests.sort((l, r) -> l.compareTo(r));

這適用于所有“功能接口”,它被定義為具有恰好一個非靜態和非默認方法的接口。


查看完整回答
反對 回復 2023-05-10
  • 2 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號