質問: ClipData.newPlainText("text", text); clipboardManager.setPrimaryClip(clipData); Toast.makeText(this, "「" + text+ "」をクリップボードにコピーしました。", Toast.LENGTH_SHORT).show(); } } ``` ### 補足情報(言語/FW/ツール等のバージョンなど) Android Studio 3.0.1
回答: これは、もしgetSystemServiceメソッドによってclipboardManagerにnullが代入されたら、 clipboardManager.setPrimaryClip(clipData); という文を実行するとnull参照(NullPointerException)のエラーになる可能性があるという警告です。単純にこの警告を避けるのならば、 ``` public void clipboard() { if (text!=null){ ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); if (clipboardManager != null) { ClipData clipData = ClipData.newPlainText("text", text); clipboardManager.setPrimaryClip(clipData); Toast.makeText(this, "「" + text+ "」をクリップボードにコピーしました。", Toast.LENGTH_SHORT).show(); } } } ``` のようにすれば警告は消えるでしょう。ただ、getSystemServiceメソッドでnullが返るのは、引数に存在しないサービスなど不正な値を設定した場合です。このケースだとnullが返ることは決してないので、このnullチェックは過剰とも言えます。そういう場合には、 ``` @SuppressWarnings("ConstantConditions") public void clipboard() { // 以下略 ``` のように、メソッド名の前に@SuppressWarningsアノテーションを用いることでチェックを抑止することもできます。 ただし、このアノテーションはこうした「明らかに過剰なチェックを抑止したい」目的だけに絞って使うべきでしょう。