javaでnullチェックをするメソッドがあったとします。

private boolean isNull(Object obj){
   // objのnullチェックする
}

自分的には

private boolean isNull(Object obj){
   // objのnullチェックする
   return obj == null;
}

と書きたくなってしまうのですが、分かりにくいという指摘をある人からされました。

みなさんでしたら、どのように実装しますか?

もしそれによるメリットなんかあったら教えていただきたいです。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

はじめまして。



ってかObjectのNULLチェックをわざわざメソッドに分けなくてもいい気がしますが・・・。

まーあえて書くなら
return obj == null;
でいいと思います。
このレベルの判定にif文使う必要ないです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ですよね。同じ考えの人がいて安心しました。

お礼日時:2011/04/08 22:20

いや,


return obj == null;
の方がよほど自然だし「間違えない」という意味でより良い. これが「わかりにくい」というのは, その「わかりにくい」という人間が悪い.

if (obj == null) {
return true;
} else {
return false;
}
でも確かに同じことだけど, このような書き方は読む人間に余計な労力を使わせてしまう.

むしろ本当にクラスの中で
private boolean isNull(Object obj)
と書いているとしたら, そっちの方がおかしい.
private boolean isNull()
static private boolean isNull(Object obj)
のどちらかでしょう.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

確かにメソッドにする意味ないかもですね。

private static boolean isNull(Object obj)
で定義してますね

お礼日時:2011/04/08 22:19

private boolean isNull(Object obj){


   if (obj == null) {
    return true;
   } else {
    return false;
   }
}






うそです。


質問にある書き方でも分かりにくいとかいうなら

private boolean isNull(Object obj){
   return obj == null ? true : false;
}


比較するものが決まり切っていて、その結果をどこかに代入したりするならば、
いちいちifうんたら~なんて書きません。

ifで書くメリットは、そもそも比較がどういうものかを理解できていない人、
三項演算子を知らない人でも理解できる、年配の方にはウケがいいという、
低次元のことしか思いつきませんでした。

他の方法では、比較を行った結果、真ならA、偽ならBとするわけですから、
微々たる差でしょうが、速度的にも、質問にある書き方がベストだと思いますけど。


指摘を受けたならば、最適解を教えてもらい、なぜそれが最適なのかを
当人に問う方が断然早いと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

指摘者からされたのは naktakさんの出した最初の例に近いです↓

private boolean isNull(Object obj){
   if (obj == null) {
    return true;
   } else {
    return false;
   }
}

見やすいということなんですが‥好みだと思うんですけどね。

お礼日時:2011/04/07 23:00

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q部屋をDIYします。 部屋のイメージ変えで壁紙を変えました。 3面パステルピンクの1面チェック柄の

部屋をDIYします。

部屋のイメージ変えで壁紙を変えました。
3面パステルピンクの1面チェック柄のパステルピンクです。
ドアが元々クリーム色なのですが、取れない汚れが着いているので、そのままペンキで塗ろうか、カッティングシートを貼ろうか悩んでいます。
そこで質問なのですが、ドアの色は何色が合うと思いますか?
元々パステルピンク×白で統一しようと思っていたので真っ白なドアにしようとしていたのですが、他に合う色があればなぁと悩んでいます。ちなみに可愛い感じのお部屋にしたいです。

宜しくお願い致します。

Aベストアンサー

白が無難です。
 家具類も。

その他の家具など相当センスよくやらないと、グダグダ感のあるピンクの部屋になるので、注意が必要ですよ
https://www.google.co.jp/search?q=%E3%83%94%E3%83%B3%E3%82%AF%E3%81%AE%E9%83%A8%E5%B1%8B&hl=ja&source=lnms&tbm=isch&sa=X&ved=0ahUKEwi4646VvtbMAhUHeaYKHWGzCnIQ_AUIBygB&biw=1280&bih=861

ドアの汚れは、マジックリンで拭いてください、その後水拭き
それでダメなら消しゴムでこすって、それでダメなら紙やすりか、固いスポンジでゴシゴしして、落とします。

それでも落ちないんだったら、最初にグレー(灰色)を塗ってから、白を塗ります。

ドアは、まっ平らですか?気泡が入らないように上手に貼れますか?(^_^;

Qjava.util.Date()メソッドについて

Javaによるプログラミングについて、初歩的な部分で質問があり投稿させていただきました。
使用しているOSはWindowsXP Homeです。
現在PCにインストールされているJDKのバージョンはjdk1.6.0_03、JREのバージョンはjre1.6.0_03です。

Javaプログラムのコードはメモ帳で記述し、コマンドプロンプトからjavacでコンパイルを行っています。

さて、

System.out.println(new java.util.Date());

のようなコードを書いてコンパイルし実行した場合に、表示される時間がJSTではなくGMTになってしまい困っています。

java.util.Calenderを用いれば解決することは分かっているのですが、どうにも気になってしまったので、何か解決する術があればと思い、質問させていただきました。

ちなみに、システムのタイムゾーンは東京になっています。

Aベストアンサー

俺はJavaをがんがんやっているという人間ではないし,
>java.util.Calenderを用いれば解決する
という意味を取り違えているかもしれないが,

例えば
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6501839

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4159107
では
Calendar.getInstance
とか
java.util.SimpleTimeZone
が正しいタイムゾーンを返さないバグとして挙がっている。

上の例ではWindows 2003 Resouce Kitのtimezone.exe等を用いて,

DST(夏時間)パッチを当てた場合,Javaが,システムのロケールの判断に使う
レジストリTIMEZONEINFORMATIONがそれに応じて変更されないためで,
コントロールパネルの「日付と時刻」でタイムゾーンのタブを選択し,OKを押すことで回避できるとしている。Java側では修正しないらしい。

#XPとVistaに以前提供されていたパッチと違うのだろうか?
#ちなみに別バグ報告によるとVistaでは見るレジストリキーが違うらしい

#行ったことでなくてもレジストリ情報があるか,アクセス権が正しいか等を確認するのは価値のあることだと思うよ。

#これは読んでません。全く関係ないかも。
http://support.microsoft.com/kb/914387/ja

俺はJavaをがんがんやっているという人間ではないし,
>java.util.Calenderを用いれば解決する
という意味を取り違えているかもしれないが,

例えば
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6501839

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4159107
では
Calendar.getInstance
とか
java.util.SimpleTimeZone
が正しいタイムゾーンを返さないバグとして挙がっている。

上の例ではWindows 2003 Resouce Kitのtimezone.exe等を用いて,

DST(夏時間)パッチを当てた場合...続きを読む

QXPで壁紙の復帰-「Win高速化PC+」の方法

XPのSP2環境です。先日デスクトップ上のアイコンをキャプチャーするために、フリーソフト「Win高速化PC+」上から、「デスクトップ」の「壁紙を非表示」にしました。しかしその後壁紙を復帰させようとしても、「壁紙を非表示する」のチェックが外れません。ヘルプには「チェックを外して再起動すれば」と書いてありますが、チェックが取れずに、復帰できません。また、ウル覚えですが以前、デスクトップ上で「右クリック→プロパティ」で「画面のプロパティ」に入り、「テーマ」のところで、壁紙を自由に選べたと思うのですが、今「参照」からはいっても、「テーマファイル」を探すだけで、画像を選択できません。どうしたらいいでしょうか?また「テーマファイル」だけの選択になっているのは、「Win高速化PC+」上で「非表示」にしてしまったせいでしょうか?
このソフトでの「チェックの外し方」と、「画面のプロパティ-壁紙の選択」について教えてください。

Aベストアンサー

参考URLをごらんください。
私も同じ現象になり 困っていましたが、今は直り 壁紙もお気に入りのになりました(^^)

参考URL:http://pasofaq.jp/windows/desktop/classicshell.htm

QNullまたはオブジェクトがありません

jspで、"Nullまたはオブジェクトがありません"というスクリプトエラーが発生します。
"Nullまたはオブジェクトがありません"といわれているところは<div id="kiki" style="display:block">と記されています。このスクリプトエラーが出る原因で思い当たる節がないのですが、どういった場合にでるのか、知識をお持ちの方、ご教授いただきたく思います。

Aベストアンサー

すいません、JSPではなくてJavaScriptですか?
だとしたら下の行数の話は忘れてください(笑)

とりあえず、下記のソースでテストしてみましたところ、
エラーは出ませんでした。
また、出力結果は次の通りでした。

(1)・・・ tmenukiki0
(2)・・・ tmenuobject

大丈夫そうな気がしますが・・・?

--------------- ソース -----------------
<html>
<head>
</head>

<script language="javascript">
function exMenu(tName,flg){
alert("tmenu"+tName+flg);
alert("tmenu"+typeof(eval('document.all.'+tName)));
if (typeof(eval('document.all.'+tName))=='object'){
tMenu = eval('document.all.'+tName+'.style');
if (tMenu.display == 'none'){
tMenu.display = "block";
} else {
tMenu.display = "none";
}
if (flg==0){
tMenu.display = "block";
}
if (flg==1){
tMenu.display = "none";
}
}else{
tMenu1 = eval('document.all.'+tName+'1.style');
tMenu2 = eval('document.all.'+tName+'2.style');
if (tMenu1.display == 'none'&&flg==0){
tMenu1.display = "block";
tMenu2.display = "none";
} else {
tMenu1.display = "none";
tMenu2.display = "block";
}
if (flg==0){
tMenu1.display = "none";
tMenu2.display = "block";
}
}
}
</script>

<body>

<form name="test" action="#">
<div id="kiki" style="display:block">test</div><BR>
<input type="button" value="push" onClick="exMenu('kiki', 0)">
</body>

</form>
</html>

すいません、JSPではなくてJavaScriptですか?
だとしたら下の行数の話は忘れてください(笑)

とりあえず、下記のソースでテストしてみましたところ、
エラーは出ませんでした。
また、出力結果は次の通りでした。

(1)・・・ tmenukiki0
(2)・・・ tmenuobject

大丈夫そうな気がしますが・・・?

--------------- ソース -----------------
<html>
<head>
</head>

<script language="javascript">
function exMenu(tName,flg){
alert("tmenu"+tName+flg);
alert("tmenu"+t...続きを読む

Q壁紙変更ソフトについて

「Wall Driver バージョン 3.10 」というソフトを使っています。Windows起動時に壁紙が自動変更するようにしたいのですが、チェックを入れても壁紙が変わりません。このソフトを使っていらっしゃる方、「どこにチェックを入れればよいか」教えてください。また、「ほかのソフトで簡単に壁紙変更できます」という方、是非教えてください。よろしくおねがいします。OSは、WindowsXPです。

Aベストアンサー

「Wall Driver バージョン 3.10 」の事は分かりませんが、私は「Bgcall」と言うソフトを愛用しています。壁紙の画像ファイルごとの選択も可能で(例えばMyPictureの中身全てとか)、シャッフルも出来ます。またデスクトップにカレンダーを表示させる機能も付いてます。PCの起動ごとに壁紙を変更するにはこのソフトを立ち上げて「スタートアップ」にチェックを入れるだけです。

参考URL:http://www.vieas.com/

Qソフト開発に関する仕様書の書き方は?

ある携帯を用いたシステム開発における仕様書を作ってくれと会社の上司から依頼されました。
当方、プログラム経験は少々ですがあります。
(といっても、MS-DOS時代のC、エクセルVBAでのツール作りくらいですが・・)
よって、具体的な仕様書をおこしたことはありません。

一口に仕様書といっても、システムの種類や内容などによって、いろいろあると思うのですが、何か具体的な仕様書フォームとかあれば、ぜひ欲しいです。
どういった項目が必要なのかがわからず、何から手をつけて良いかが、わからないもので・・

ちなみに、仕様書を作成する側(SEと呼ばれる立場?)は、開発する環境(使用するハードやソフト)、開発言語、使用するDB、開発するための規則なども細々と決めなければならない(仕様書に盛り込む必要がある)のでしょうか?

プログラミングは、外部のソフトベンダーに依頼するそうなのですが、そうなると仕様書がしっかり書かれていないとマズいような気がしています・・
しかし、どこまでのことを仕様書を作成する側がやらなければならないかも、ちょっとわからないんです。

また、仕様書を作成する業務=システム設計またはプログラム設計と考えてもよろしいのでしょうか?

ある携帯を用いたシステム開発における仕様書を作ってくれと会社の上司から依頼されました。
当方、プログラム経験は少々ですがあります。
(といっても、MS-DOS時代のC、エクセルVBAでのツール作りくらいですが・・)
よって、具体的な仕様書をおこしたことはありません。

一口に仕様書といっても、システムの種類や内容などによって、いろいろあると思うのですが、何か具体的な仕様書フォームとかあれば、ぜひ欲しいです。
どういった項目が必要なのかがわからず、何から手をつけて良いかが、わからない...続きを読む

Aベストアンサー

仕様書と言っても色々な種類がありますが、プログラミングを外部に発注するための仕様書であれば、要求仕様書になると思います。
一般的には、なんのためのシステムか、入力データと出力データ、操作方法(GUI)、必要な機能、性能、保守、スケジュール、開発方法、言語、動作環境、耐障害性、データバックアップなどなど。
プログラムを作ってもらうための、必要な要件を記述すれば良いのです。要件を文章や図で記述するか、大変だったら、要件のみ箇条書きにすれば良いと思われます。
もしくは、発注先のSEとの会話で、上記の要件をヒアリングしてもらい、先方に要件定義書ということでまとめてもらうやりかたもあります。ただし、この工程の費用も請求されると思われます。
このプロセスがシステムを作る上で最も基本となる部分ですので、ここが正確に伝わっていないと、希望に添っていないシステムができあがり、トラブルの元となります。
ちなみに、要求仕様(要件定義)のあとに、システム設計、運用設計、プログラム設計、試験設計、導入(移行)設計などという形ですすんで生きます。このような進め方をウォーターフォールモデルといいます。
GUIがメインのシステムの場合(WebAPや業務APなど)、画面デザインや操作性などの決定に非常に時間がかかり、ウォーターフォールモデルは適用しにくいです。その場合はスパイラルモデルを適用します。プロトタイピング、RAPなどがそれにあたります。
なお、要件定義、システム開発プロジェクト管理などを自社でまかなえない場合、発注先に丸投げすることになり、非常にリスクが高くなります。そのため、発注先の立場として、外部にプロジェクト管理を委託するケースもあります。参考URLをどうぞ。

参考URL:http://www.geocities.jp/tk_yosh/index.html

仕様書と言っても色々な種類がありますが、プログラミングを外部に発注するための仕様書であれば、要求仕様書になると思います。
一般的には、なんのためのシステムか、入力データと出力データ、操作方法(GUI)、必要な機能、性能、保守、スケジュール、開発方法、言語、動作環境、耐障害性、データバックアップなどなど。
プログラムを作ってもらうための、必要な要件を記述すれば良いのです。要件を文章や図で記述するか、大変だったら、要件のみ箇条書きにすれば良いと思われます。
もしくは、発注先のSEと...続きを読む

QBingの壁紙設定

Bingの壁紙を変更したいです。
僕のお気に入りはBingサイトにある1つ前の壁紙なのですが、静止画像を保存するにチェックを入れてもトップの壁紙になってしまいます。

1つ前の壁紙に設定する方法をご存知の方がいれば教えていただけると幸いです。
よろしくお願いします。

Aベストアンサー

検索窓の「歯車」アイコンをクリック「設定」「Bing のホームページ画像をデスクトップの壁紙として設定する」のチェックを外します。(Windows 8.1では「歯車」の左「i」アイコンから設定かも)

Q使用するパソコンの違いでメソッドのエラーが出ます。

以下のようなVBAで、ボタンを押すと、指定したアドレスにファイルが添付されるようにしました。
大抵のパソコンからは送れるのですが、たまにエラーで
「実行時エラー'1004'
'send Mail メソッドは失敗しました。'_Workbook'オブジェクト」
と言うのがでて送れなかったと報告を受けます。
4行目が黄色くなっているそうなのですが、使用するパソコンの設定か何かで送れないことがあるのでしょうか?
それとも、そもそも根本的に違っているのでしょうか?
よろしくお願いします。

Sub SendMail()
Dim strAddress As String
strAddress = "ここは送付先のアドレス"
ActiveWorkbook.SendMail Recipients:=strAddress
Range("J1:K6,K11:K25").Select
Range("K11").Activate
Selection.ClearContents
End Sub

Aベストアンサー

>どのパソコンからも送れるように設定することはできるのでしょうか?

SMTPサービス コンポーネントをインストールすれば可能ですが、インストールしない場合は、SMTPサーバを指定しないといけないので難しいのではないかと思います。

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/428wshmail/wshmail.html

Qタバコによる壁紙の変色をきれいにしたい

持ちマンションを2年間賃貸で貸した後に部屋をチェックしたところ白い壁紙が黄色に変色していました。2年前にリフォームして壁紙も張り替えたばかりなのでクリーニングして元の白い壁紙に再生したいと思います。
何かよい方法があったら洗浄剤など教えてください。
又、ハウスクリーニング業などで壁紙の洗浄をお願いできるところがあったら紹介してください。
ちなみに持ちマンションは川越市駅から徒歩5分のところです。

Aベストアンサー

こんばんは。
ガラスクルーと言う商品で、
吹き付けると、泡と共にヤニが溶けて浮き上がり、いとも簡単に雑巾で拭き取れ完全にまっ白になります。
業者に頼まなくても全く問題ありませんよ\(^_^)/

QWSHのCopyFile()メソッドで%systemroot%の使い方を教えてください

ネット等でいろいろ調べましたがわかりません。どなたか教えて頂けますでしょうか?

VBSのCopyFolder()メソッドを使用し、あるフォルダを他の複数のPCのシステムフォルダ(C:\winnt or C:\Windows)へコピーしたいのですが、コピー先のOSが異なります(Windows2000とwindowsXP)。この場合、スクリプト中に"%systemroot%"を使うことは可能でしょうか?
可能なら、どのように書けばよいのでしょうか?

よろしくお願いします。

Aベストアンサー

環境変数から調べるのがわからなかったんで次の方法で
GetSpecialFolder(0)は、Windowsフォルダを取得する

Set fs=WScript.CreateObject("Scripting.FileSystemObject")
Set ws=WScript.CreateObject("WScript.Shell")
i=fs.GetSpecialFolder(0)
o="C:\downloads2"
msg=MsgBox (i&"から"&o&"へコピーします。いいですか?",vbYesNo)
If msg=vbYes Then fs.CopyFolder i,o


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報