/** * ドメイン非依存URL出力フィルタ * javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい * * データベースには絶対URL(https://minner.asia)を保持し、 * 表示時に現在のドメイン(home_url())に動的変換する */ function javadrill_make_urls_dynamic($content) { if (empty($content)) { return $content; } // データベース内の絶対URLを現在のhome_url()に置換 $old_url = 'https://minner.asia'; $new_url = untrailingslashit(home_url()); // http版も対応(念のため) $content = str_replace($old_url, $new_url, $content); $content = str_replace('http://minner.asia', $new_url, $content); return $content; } // 投稿本文、ウィジェット、タームの説明、抜粋に適用 add_filter('the_content', 'javadrill_make_urls_dynamic', 20); add_filter('widget_text', 'javadrill_make_urls_dynamic', 20); add_filter('term_description', 'javadrill_make_urls_dynamic', 20); add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20); 015 ポリモーフィズム(ダウンキャスト) 011 解答例 | Javaドリル

015 ポリモーフィズム(ダウンキャスト) 011 解答例

015-011 015 ポリモーフィズム
public class Main {
    public static void main(String[] args) {
        // インスタンスの実際の型が不明なオブジェクト
        Object unknownObject = getUnknownObject();

        // null チェックを行ってからインスタンスが特定の型であるかを確認してからダウンキャスト
        if (unknownObject != null) {
            if (unknownObject instanceof SpecificType) {
                SpecificType specificInstance = (SpecificType) unknownObject;
                // ダウンキャスト後の処理
                specificInstance.doSomething();
            } else {
                System.out.println("The object is not of the expected type");
            }
        } else {
            System.out.println("The object is null");
        }
    }

    // 仮のメソッド:実際のアプリケーションでは適切な方法でオブジェクトを取得
    private static Object getUnknownObject() {
        // ここでは単に SpecificType クラスの新しいインスタンスを返す例
        return new SpecificType();
        // または null を返すこともあります
        // return null;
    }
}

// 仮のクラス:実際のアプリケーションでは適切な型を使用
class SpecificType {
    void doSomething() {
        System.out.println("Doing something specific");
    }
}

この例では、unknownObject というオブジェクトが特定の型であるかどうかを instanceof 演算子を使用して確認してから、安全にダウンキャストしています。また、null チェックも行い、NullPointerException を回避しています。これにより、プログラムが安全に実行されるようになります。

NullPointerException の回避

NullPointerException(以下、NPE)(別名”ヌルポ”)は、Javaプログラムでよく見られる例外の一つで、特にオブジェクトの参照がnullであるときに発生します。これを回避するためには、適切なnullチェックが必要です。

前述のコード例では、次のようにNPEを回避しています:

// null チェックを行ってからインスタンスが特定の型であるかを確認してからダウンキャスト
if (unknownObject != null) {
    if (unknownObject instanceof SpecificType) {
        SpecificType specificInstance = (SpecificType) unknownObject;
        // ダウンキャスト後の処理
        specificInstance.doSomething();
    } else {
        System.out.println("The object is not of the expected type");
    }
} else {
    System.out.println("The object is null");
}

この部分がnullチェックのコードです:

if (unknownObject != null) {
    // ...
} else {
    System.out.println("The object is null");
}

この部分は、unknownObject がnullでない場合に、その後のコードを実行するようにしています。nullである場合には、The object is null と表示しています。このようなチェックを行うことで、unknownObject がnullである場合にNPEを回避できます。

NPEはプログラムの実行時に発生する例外であり、オブジェクトがnullである状態でメソッドやフィールドにアクセスしようとすると発生します。そのため、オブジェクトがnullでないことを確認してから操作を行うことが、NPEを回避する重要な手法です。

「015 ポリモーフィズム」問題集リスト

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

コメント

タイトルとURLをコピーしました