[英]Java workaround for subclass forced to call super() in constructor?
我正在編輯一個使用RandomAccessFile對象的程序,我想提出我自己的RandomAccessFile類,它使用不同於文件對象的數據源(它是一個Amazon webservices S3對象,但這是無關緊要的)
我想基本上創建一個名為RandomAccessS3的類,它將RandomAccessFile作為其超類,所以我可以簡單地說
RandomAccessFile raf = new RandomAccessS3();
因此保持現有代碼相同。 我將簡單地覆蓋RandomAccessFile中的每個方法。
問題是在子類RandomAccessS3的構造函數中,我被迫使用super(文件,模式)調用RandomAccessFile的構造函數,該函數將參數作為文件名,如果文件無效則拋出錯誤並死亡。
我不能用try / catch塊包圍super()調用,因為super需要是構造函數中的第一行。 我可以提供一個虛擬文件,但我不想強迫用戶這樣做。 這有什么簡單的方法嗎?
謝謝!
好吧,你實際上可以在超類上設置一個名稱屬性。 在該類的構造函數中,將傳入的String的值設置為屬於該類的名稱實例變量。
這樣,所有派生類必須在實例化子實例時傳入某些內容,並且傳遞的值將延遲到父類。 這樣你可以強制super()總是被衍生物調用。
這沒有簡單的方法。 構造函數用於確保實例處於良好/有效狀態,而RandomAccessFile的部分契約是實例鏈接到有效文件。
作為一個巨大的黑客,我想你可以創建一個臨時文件,只是為了滿足RandomAccessFile構造函數。
更好的方法可能是創建一個新接口並將RandomAccessFile的引用更新到新接口。 然后,實現接口兩次,一次使用RandomAccessFile,一次使用S3調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.