JavaでLongを返して欲しいところをぬるぽを投げつけられました。

どうしたらガッってできますか??

ちなみに相手先のクラスは弄れないのでこっちでガッってする方法をお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:yatmsu No.1

回答回数48ベストアンサー獲得回数0

ポイント16pt

Longを取りたいクラスにgetメソッドを用意してLongを返すようにするしかないですね。

全く弄れないとなるとキャストしてLongに変換するなりするしか無いです。

id:kuippa

getメソッドは既にあってそこにLongが入っているはずなんですが、入ってないのでぬるぽーーー!と言われます。 Javaはnullをキャストできるんですか??? (´0ω0`)??

なんかこう参照するまえに

if (hogehogeLong != null) {

System.out.println(hogehogeLong);

}

みたいな方法ってなんかなかとですか??

2006/01/12 03:53:23
id:yatmsu No.2

回答回数48ベストアンサー獲得回数0

ポイント16pt

なるほど。

それだとLongを返すはずのクラスにバグがあるような気がするんですが・・・。

ソースを公開する事は出来ますか?

公開したら回答もしやすくなるので私が分かれば私が。ほかのはてなユーザーが回答してくれると思うんですけど。

id:kuippa

そーすは、というかSDKはかぶろぼのやつです。

http://www.kaburobo.jp/indexpage.do

これの、

java.lang.Object

jp.kaburobo.information.BusinessPerformanceInformation

に、

long getIssuedAndOutstanding() 総株式数を返します。

っていうのがいるんですが、銘柄によってぬるえくせぷちぃおん返すやつがいるんですよね。多分データがないだけのような気もするんですが、そこで途切れちゃうので、無視するなりなんなりさせたいのですが・・・

2006/01/12 13:59:32
id:upride No.3

回答回数220ベストアンサー獲得回数1

ポイント16pt

try ~ catch ではだめとですか?

id:kuippa

try 〜 catchでよかとですが、

今、大きくtry 〜 catchしてるんだけど、そこの読み込みのところだけ次善策としてtry 〜 catchをネストしてやればよかと?

記述サンプルがほしいので、参照URLがあったらうれしかった。

2006/01/12 14:01:41
id:F57PB No.4

回答回数86ベストアンサー獲得回数0

ポイント16pt

http://java.sun.com/

Java Technology

ご自身でもかかれていますが、最も単純なのは、


-------------------------------------------------

Long value = hoge.getLong();

if(value == null) {

 /* nullの時の処理 */

}

-------------------------------------------------


と言うif分岐を入れることでしょうね。


問題は、nullの時の処理を何にするかです。


a.処理継続できないとしてエラーにする

b.何らかのデフォルト値を使う(nullの時は0と解釈する等)

等が一般的ですね。


また、そもそもそのメソッドがnullを返して来ること自体が

仕様上おかしい、と言う事であれば、作成元に修正を依頼するのが

最善の手段です。(可能かどうかは別ですが)


ちなみに、

> Javaはnullをキャストできるんですか?

できます。

以下は妥当ですし、エラーにもなりません。

------------------------------------------------

Object value = null;

Long longValue = (Long)value;

System.out.println(”longValue = ” + longValue);

------------------------------------------------


あと、私もプログラマなので余計な一言を。。。

この程度のことは自分で(上記のような)サンプルコードを書けば簡単に検証できます。

もし貴方が職業プログラマなのであれば、このくらいは自力で解決する

努力をしないといつまでたっても初心者止まりですよ。

id:kuippa

ごめんなさい、眠かったんで寝ちゃいました。

今はこれでお金もらってるわけではないので趣味ぷろぐらまですw

お作法の問題だったので、知っている人に聞いたほうが早いかなと。

・・・。

Long value = hoge.getLong();

この行でぬるぽが帰ってくるってことは…。

中でエラートラップがされてないんですかね。

------------------------------------------------

Object value = null;

Long longValue = (Long)value;

System.out.println(”longValue = ” + longValue);

------------------------------------------------

これがエラーなしってのがなにか空恐ろしい気がするんですが、私だけですかね。なんだろ、0が入ってくるのかな…。

これはこれで気になる…。

2006/01/12 14:11:09
id:F57PB No.5

回答回数86ベストアンサー獲得回数0

ポイント16pt

http://www.tele.ucl.ac.be/PEOPLE/UMEDA/kaburobo2004/JavaDoc/jp/k...():detail]

> Long value = hoge.getLong();

> この行でぬるぽが帰ってくるってことは…。

> 中でエラートラップがされてないんですかね。

上記URLのメソッドの事ですね?

まず、戻り値はLong(クラス)ではなく、long(基本型)ですね。

基本型にはnullはあり得ないので、戻り値がnullなのではなく、

ご認識されているようにこのメソッドの中でNullPointerEx.が発生していますね。

(ただ、NullPointerEx.は一般的にはハンドリング(エラートラップ)しません。本来起こってはならないエラーなので、根本原因を解決すべきなんです。)


まず、どこで発生しているのかを特定するには、スタックトレースを見るのがセオリーです。

java.lang.NullPoinerException

at ..........(クラス名:ソースコードの行番号)

at ..........(クラス名:ソースコードの行番号)

  :

と言うのが出ているはずですが、その一番上のatが発生元になります。

http://www.kpdus.com/jad.html

Home Page of Jad - the fast Java decompiler

次に、発生元がわかれば、なぜエラーになるのか、原因を調査するのですが、

ソースコードの該当個所を見て追跡すればわかります。


今回は、ソースコードが無いようですので、上記URLにあるJadで逆コンパイルして

ソースコードを生成し、該当個所を確認する手があります。

(解凍して、> jad -lnc BusinessPerformanceInformation.class で実行)


ソースコードを読んで、原因がわかればそれに対処します。

今回の場合、 BusinessPerformanceInformationクラスは単なるJavaビーンであり、

大したロジックを持っていないと思いますので、根本原因は別にありそうな予感がします。


となると、原因はさらにさかのぼって調査する羽目になり、そこまで手間かけてられないよ、

と言う事で、対処療法的に解決するのがベターなように思います。


対処療法としては、uprideさんが示されているように、try~catchで囲みます。

------------------------------------------------

long value = 0;

try {

 value = hoge.getIssuedAndOutstanding();

}

catch(NullPointerException e) {

 /* とりあえず、0として処理を継続する */

 value = 0;

}

------------------------------------------------


ただし、このようにtry~catchを使うのは「やむを得ない場合」だけの

最後の手段であり、本来はNullPointerEx.の発生を回避するのが基本です。

http://www.hatena.ne.jp/1137000566#

人力検索はてな - JavaでLongを返して欲しいところをぬるぽを投げつけられました。 どうしたらガッってできますか?? ちなみに相手先のクラスは弄れないのでこっちでガッってする方法をお願..

>> ------------------------------------------------

>> Object value = null;

>> Long longValue = (Long)value;

>> System.out.println(”longValue = ” + longValue);

>> ------------------------------------------------

> これがエラーなしってのがなにか空恐ろしい気がするんですが、私だけですかね。

> なんだろ、0が入ってくるのかな…。これはこれで気になる…。

確かに恐ろしいですね。

実際、システム開発の現場でもNullPointerEx.は発生率ナンバーワンのエラーです。


この例では、valueにはnullが入っています。0も入っていません。

細かく説明しだすとJavaの言語仕様まで踏み込んでしまうので割愛しますが、


3行目を、

------------------------------------------------

System.out.println(”longValue = ” + longValue.toString());

------------------------------------------------

に変えると、NullPointerEx.になります。


なぜかと言うと、

 ・もとの例では、valueのメソッドを呼び出していない

 ・3行目を変えた例では、valueのメソッドを呼び出している

からです。

valueにはnullが入っているので、nullに対してメソッドを呼び出すのは不正なわけです。

id:kuippa

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

ちょうどここまですすんだところです。

おっしゃる通り呼び出し先でぬるっぽが起きていて、上にぬるぬるぬるとあがってきていました。どうも100銘柄のうち8銘柄だけ目的のデータが無いみたい。(´・ω・`)

(単純な原因なんですが… …データ故どうしたものか悩んでしまいます…)

今回は、ちょっと質問の仕方がよくなかったですね。

ぬるっぽ=ぬるぽいんたーえくちぇぴちぉーん〜のつもりだったんですが、なんかよくわからない質問になってしまいました。

手探りながらもお答えいただきました皆様ありがとうございます。

なんとなく分かっていても、「Java + NullPointerException」で検索して目的のエスケープ方法を探すのは結構しんどいです。Java本とかを順を追って読んでいけば自然とみにつくのかもしれませんが、Javaの勉強をしたかったわけでもないので、今回ははてなで質問させていただきました。そんな簡単なことを聞いてたら身につかないよというご意見もあるかもしれませんが、初心者には熟練者が持っているお作法的なカンというものがとても鈍いものです。しってりゃなんてことも無いことでも悩んでしまいます。またそれが悩む必要があるものなのかも知らなかったりするので、性質がわるいです。

というわけで教えてくんにもご理解をいただけましたら幸いです。

2006/01/12 16:11:22

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません