第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Java中的setter和getter的意義是什么?

Java中的setter和getter的意義是什么?

慕森王 2019-10-11 14:15:24
請原諒它的長度,但是這里有兩個程序,兩者完全相同,但是一個有一個沒有setter,getter和構造函數(shù)的程序。我之前已經(jīng)學過一個基本的C ++類,并且不記得其中的任何一個,而現(xiàn)在我沒有看到它們的意義,如果有人可以用拉面的術語來解釋它們,我將非常感激。目前,它們似乎不過是浪費空間,以使我的代碼看起來更長,但老師說它們很重要(到目前為止,就是這樣)。提前致謝!現(xiàn)在是代碼:Mileage.java:package gasMileage;import java.util.Scanner; //program uses class Scannerpublic class Mileage {    public int restart;    public double miles, gallons, totalMiles, totalGallons, milesPerGallon;    public Mileage(int newRestart, double newMiles, double newGallons,                    double newTotalMiles, double newTotalGallons, double newMilesPerGallon)    {        setRestart(newRestart);        setMiles(newMiles);        setGallons(newGallons);        setTotalMiles(newTotalMiles);        setTotalGallons(newTotalGallons);        setMilesPerGallon(newMilesPerGallon);    }    public void setRestart(int newRestart)    {        restart = newRestart;    }    public int getRestart()    {        return restart;    }    public void setMiles(double newMiles)    {        miles = newMiles;    }    public double getMiles()    {        return miles;    }    public void setGallons(double newGallons)    {        gallons = newGallons;    }    public double getGallons()    {        return gallons;    }    public void setTotalMiles(double newTotalMiles)    {        totalMiles = newTotalMiles;    }    public double getTotalMiles()    {        return totalMiles;    }    public void setTotalGallons(double newTotalGallons)    {        totalGallons = newTotalGallons;    }    public double getTotalGallons()    {        return totalGallons;    }    public void setMilesPerGallon(double newMilesPerGallon)    {        milesPerGallon = newMilesPerGallon;    }    public double getMilesPerGallon()    {        return milesPerGallon;    }  
查看完整描述

3 回答

?
繁星淼淼

TA貢獻1775條經(jīng)驗 獲得超11個贊

無論哪種語言,getter和setter的目的都是隱藏基礎變量。這樣,您可以在嘗試設置值時添加驗證邏輯-例如,如果您有一個出生日期字段,則可能只希望將該字段設置為過去的某個時間。如果該字段是公共可訪問和可修改的,則不能強制執(zhí)行此操作-您需要使用getter和setter。

即使您不需要任何驗證,將來也可能需要它?,F(xiàn)在,編寫getter和setter意味著接口保持一致,因此更改現(xiàn)有代碼不會中斷。


查看完整回答
反對 回復 2019-10-11
?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

其他答案通??梢院芎玫卣f明使用getter和setter的一些原因,但是我想給出一個為什么它們有用的完整示例。


讓我們以一個文件為例(忽略FileJava中類的存在)。此類File具有用于存儲文件類型(.pdf,.exe,.txt等)的字段...我們將忽略其他所有內(nèi)容。


最初,您決定將其存儲為String沒有getter和setter的a:


public class File {

   // ...

   public String type;

   // ...

}

這是一些不使用getter和setter的問題。


無法控制字段的設置方式:


您班上的任何客戶都可以使用它來做他們想做的事情:


public void doSomething(File file) {

   // ...

   file.type = "this definitely isn't a normal file type";

   // ...

}

稍后您決定不希望他們這樣做……但是由于他們可以直接訪問您班級中的該字段,因此您無法阻止它。


無法輕松更改內(nèi)部表示形式:


稍后,您決定將文件類型存儲為名為的接口的實例FileType,從而使您可以將某些行為與不同的文件類型相關聯(lián)。但是,您班上的許多客戶端已經(jīng)在檢索文件類型并將其設置為Strings。所以,你有一個問題存在......你會傷了大量的代碼,如果你只是改變了字段從(即使在你無法自己解決,如果它是一個庫中的其他項目代碼)String的FileType。


Getter和Setter如何解決這個問題


現(xiàn)在想象一下,您改為創(chuàng)建了type字段private并創(chuàng)建了


public String getType() {

   return this.type;

}


public void setType(String type) {

   this.type = type;

}

控制設置屬性:


現(xiàn)在,當您要實現(xiàn)僅某些字符串是有效文件類型并禁止其他字符串的要求時,您可以編寫:


public void setType(String type) {

   if(!isValidType(type)) {

       throw new IllegalArgumentException("Invalid file type: " + type);

   }

   this.type = type;

}


private boolean isValidType(String type) {

   // logic here

}

輕松更改內(nèi)部表示的能力:


更改String類型的表示形式相對容易。假設您有一個enum ValidFileType實現(xiàn)FileType并包含有效文件類型的。


您可以像這樣在類中輕松更改文件類型的內(nèi)部表示形式:


public class File {

   // ...

   private FileType type;

   // ...

   public String getType() {

      return type.toString();

   }


   public void setType(String type) {

      FileType newType = ValidFileType.valueOf(type);


      if(newType == null) {

         throw new IllegalArgumentException("Invalid file type: " + type);

      }


      this.type = newType;

   }

}

由于班級的客戶一直在打電話getType(),setType()無論如何,從他們的角度來看,沒有任何變化。僅更改了類的內(nèi)部,而不更改了其他類正在使用的接口。


查看完整回答
反對 回復 2019-10-11
  • 3 回答
  • 0 關注
  • 913 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號