簡體   English   中英

在調用超類的構造函數之前解析子類中的參數

[英]Parsing parameters in subclass before calling constructor of the superclass

public Subclass(String[] parameters) throws IllegalArgumentException {
    super("Rectangle",
        Double.parseDouble(parameters[0]),
    Double.parseDouble(parameters[1]),
    90,
    Double.parseDouble(parameters[2]),
    Double.parseDouble(parameters[3]));
            if(parameters.length != 4) throw new IllegalArgumentException("bla, bla");
    if(parameters == null) throw new IllegalArgumentException("bla, bla");
}

我想在調用超級構造函數之前先放這兩個if語句。 我知道我不能這樣做,那么在調用super()之前,那種解析參數(拋出Exception )的無痛方法是什么?

使用String[]聲明一個驗證方法並返回它:

private static String[] validate(String[] param) {
    // do validation here
    return param;
}

在第一次使用param時調用它

super("Rectangle", Double.parseDouble(validate(param).parameters[0]),

這個技巧可以快速解決問題,但是,正如另一張海報所指出的,有時最好重構你的API(比如創建一個工廠方法)。

您可以創建工廠模式(例如抽象工廠 )來創建從中獲取新實例的工廠對象。 然后,在調用真實子類的(私有)構造函數之前,獲取新實例的工廠類方法可能會拋出錯誤的參數異常。

您還可以在創建和返回新實例之前使用Builder模式驗證參數。 您創建一個構建器對象(通常是一個內部類,以便它可以訪問外部類的私有構造函數等),設置其屬性並調用build()方法 - 該方法可以在返回之前執行您需要的任何驗證新實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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