質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

384閲覧

オブジェクト指向 別パッケージの例外処理の引き継ぎ

oimo0505

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2022/08/11 04:25

前提

javaで別パッケージのnull判定文に従ってtry-catchで例外処理を行いたいと考えています。
自作クラスなどについては、クラス名の前にパッケージ名をつけることで引き継ぐことができたのですが、catch文の部分だけ例外処理を引き継ぐことができなくて困っています。
先頭にimport文などを置くなどする必要があるのでしょうか?それともそもそも引き継ぐことはできずもう一度該当パッケージ内で例外処理の文を書き直す必要があるのでしょうか?
ご教授いただきたいです。コードが汚く理解しづらい点があると思いますがよろしくお願いします。

ディレクトリは下記の通りです。
Stage
・test1→Bond.java
・test2→BondTest.java

実現したいこと

  • パッケージtest1にあるコンストラクタBondのcodeの引数がnullの時、IllegalArgumentExceptionを用いてnull判定を行う処理をパッケージtest2のBondクラスのcatch処理に引き継ぐ

該当のソースコード

Java

1package test1; 2 3import java.util.Objects; 4 5public class Bond { 6 private String code; 7 private String name; 8 private int maturity; 9 private double coupon; 10 private String BondType; 11 12 public Bond (String code, String name, int maturity, double coupon) { 13 this.code = code; 14 this.name = name; 15 this.maturity = maturity; 16 this.coupon = coupon; 17 } 18 //getter 19 public String getCode() { 20 return this.code; 21 } 22 public String getName() { 23 return this.name; 24 } 25 public int getMaturity() { 26 return this.maturity; 27 } 28 public double getCoupon() { 29 return this.coupon; 30 } 31 public String getBondType() { 32 if (coupon == 0) { 33 BondType.equals("ZERO_COUPON_BOND"); 34 } else { 35 BondType.equals("COUPON_BOND"); 36 } 37 return this.BondType; 38 } 39 40 @Override 41 public String toString() { 42 StringBuilder builder = new StringBuilder(); 43 builder.append(code); 44 builder.append(name); 45 builder.append(maturity); 46 builder.append(coupon); 47 builder.append(BondType); 48 return builder.toString(); 49 } 50 51 //equalsメソッド 52 @Override 53 public boolean equals (Object obj) { 54 if (this == obj) { 55 return true; 56 } 57 if (obj == null) { 58 return false; 59 } 60 if (getClass() != obj.getClass()) { 61 return false; 62 } 63 Bond other =(Bond)obj; 64 if (this.code != other.code) { 65 return false; 66 } 67 if (maturity == 0) { 68 if (other.maturity != 0) { 69 return false; 70 } 71 } else if (maturity != other.maturity) { 72 return false; 73 } 74 if (Double.compare(other.coupon,coupon) != 0) { 75 return false; 76 } 77 // チェック処理 78 if (code == null || name == null) { 79 throw new IllegalArgumentException("nullです。"); 80 } 81 if (maturity < 20000101 || 29991231 < maturity || coupon < 0) { 82 throw new IllegalArgumentException("数値が範囲外です"); 83 } 84 return true; 85 } 86 87 //hashCode 88 @Override 89 public int hashCode() { 90 return Objects.hash(this.code, this.maturity, this.coupon); 91 } 92} 93 94 95package test2; 96 97public class BondTest { 98 public static void main (String [] args) { 99 try { 100 test1.Bond bond2 = new test1.Bond(null, "name", 20220810, 1); 101 System.out.println(bond2); 102 } 103 catch (IllegalArgumentException e ) { 104 System.out.println("入出力エラーです。"); 105 } 106 } 107}

試したこと

catchをtest1.IllegalArgumentExceptionとした場合シンボルが見つからずそもそもコンパイルができなかった。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/08/11 04:58

現状の、単にIllegalArgumentExceptionと書いたコードではどのような問題が起きるのですか?
oimo0505

2022/08/11 05:05

maisumakun様 単に書いたコードを実行するとcodeがnullの場合もtry部分のbond2の出力が行われてしまいます。 nullの場合はIllegalArgumentExceptionが表示されるようにしたいです。
guest

回答1

0

ベストアンサー

チェック処理をequalsメソッドからコンストラクタに移動して下さい。
インスタンスを作るだけではequalsメソッドは呼ばれません。

投稿2022/08/11 05:07

LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oimo0505

2022/08/11 05:10

LouiS0616様 回答ありがとうございます。無事実行できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問