簡體   English   中英

子類的Java解決方法被強制在構造函數中調用super()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM