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

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

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

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

Q&A

解決済

1回答

860閲覧

getterで返した文字列をを他パッケージで出力

oimo0505

総合スコア22

Java

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

0グッド

1クリップ

投稿2022/08/12 07:47

編集2022/08/12 08:08

前提

 現在二つのパッケージを用いて、コンストラクタBondの引数couponが0の時とそれ以外の時でBondTypeの文字列を分岐させることに取り組んでいます。そこでパッケージtest1のBondTypeのgetter内で分岐をするようにコードを書いたのですが、うまく分岐ができているか確認するため、パッケージtest2のBondTestでgetBondType()の部分を出力させたいのですが、出力の仕方でつまづいている状況です。
getterの出力方法についてご教授いただけないでしょうか。enum型を使うのが今回が初めてで使用方法が間違っていれば加えてご教授いただきたいです。よろしくお願い致します。

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

実現したいこと

  • package test1: getBondType()の結果をpackage test2 : BondTestファイル内で出力させる。

該当のソースコード

Bond.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 if (code == null || name == null) { 19 throw new IllegalArgumentException("nullです。"); 20 } 21 if (maturity < 20000101 || 29991231 < maturity || coupon < 0) { 22 throw new IllegalArgumentException("数値が範囲外です"); 23 } 24 } 25 //getter 26 public String getCode() { 27 return this.code; 28 } 29 public String getName() { 30 return this.name; 31 } 32 public int getMaturity() { 33 return this.maturity; 34 } 35 public double getCoupon() { 36 return this.coupon; 37 } 38 public String getBondType() { 39 if (coupon == 0) { 40 BondType.equals("ZERO_COUPON_BOND"); 41 } else { 42 BondType.equals("COUPON_BOND"); 43 } 44 return this.BondType; 45 } 46 47 @Override 48 public String toString() { 49 StringBuilder builder = new StringBuilder(); 50 builder.append(code); 51 builder.append(name); 52 builder.append(maturity); 53 builder.append(coupon); 54 builder.append(BondType); 55 return builder.toString(); 56 } 57 58 //equalsメソッド 59 @Override 60 public boolean equals (Object obj) { 61 if (this == obj) { 62 return true; 63 } 64 if (obj == null) { 65 return false; 66 } 67 if (getClass() != obj.getClass()) { 68 return false; 69 } 70 Bond other =(Bond)obj; 71 if (this.code != other.code) { 72 return false; 73 } 74 if (maturity == 0) { 75 if (other.maturity != 0) { 76 return false; 77 } 78 } else if (maturity != other.maturity) { 79 return false; 80 } 81 if (Double.compare(other.coupon,coupon) != 0) { 82 return false; 83 } 84 85 return true; 86 } 87 88 //hashCode 89 @Override 90 public int hashCode() { 91 return Objects.hash(this.code, this.maturity, this.coupon); 92 } 93}

Bondtype.java

1package test1; 2 3public enum BondType { 4 COUPON_BOND, ZERO_COUPON_BOND 5}; 6

BondTest.java

1package test2; 2 3public class BondTest { 4 public static void main (String [] args) { 5 6 test1.Bond bond3 = new test1.Bond("code", "name", 20220812, 1.0); 7 test1.BondType bondType = new test1.BondType(); 8 bondType.show(); 9 } 10}

試したこと

BondTestファイルに
・test1.BondType bondType = new test1.BondType();
bondType.show();
・System.out.println(test1.builder);
などでコンパイルしたが、シンボルが得られず出力できなかった。

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

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

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

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

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

jimbe

2022/08/12 08:05 編集

コードのマークダウンはファイル毎に分けて頂けますか。 マークダウンは見易くするだけでなく、コピペが簡単に出来る機能もありますが、全てが纏まっているとコピペして編集する必要があり、その過程で間違いが発生する可能性があります。 同様の意味で、コードで無い文字列("~~~"等)も入れない、もしくはコメントとするようにして頂いたほうが良いように思います。
oimo0505

2022/08/12 08:09

jimbe様 ご指摘ありがとうございます。コードをファイルごとに分けるよう修正いたしました。
oimo0505

2022/08/12 08:12

hoshi-takanori様 返答ありがとうございます。 BondTypeはenum型に格納するだけのファイルでパッケージtest1に属したという認識で進めていたのですが、この場合は属していないことになっているのでしょうか。
hoshi-takanori

2022/08/12 08:19

あ、ごめんなさい。私の勘違いでした。(というか、たぶん teratail の仕様で「ディレクトリは下記の通りです。」のところのスペースが消えたと思われる…)
oimo0505

2022/08/12 08:21

hoshi-takanori様 こちらこそ理解しにくい書き方になっていたと思います。申し訳ございません!
guest

回答1

0

ベストアンサー

enum は new でオブジェクトを生成することは出来ません。enum 内で宣言しているモノのみしか使えないからこそ enum の意味があります。
また、 enum で定義されていないメソッドは当然使えません。


test1/Bond.java

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 BondType type; 11 12 public Bond (String code, String name, int maturity, double coupon) { 13 if (code == null || name == null) { 14 throw new IllegalArgumentException("nullです。"); 15 } 16 if (maturity < 20000101 || 29991231 < maturity || coupon < 0) { 17 throw new IllegalArgumentException("数値が範囲外です"); 18 } 19 20 this.code = code; 21 this.name = name; 22 this.maturity = maturity; 23 this.coupon = coupon; 24 if (coupon == 0) { 25 type = BondType.ZERO_COUPON_BOND; 26 } else { 27 type = BondType.COUPON_BOND; 28 } 29 } 30 public String getCode() { 31 return this.code; 32 } 33 public String getName() { 34 return this.name; 35 } 36 public int getMaturity() { 37 return this.maturity; 38 } 39 public double getCoupon() { 40 return this.coupon; 41 } 42 public BondType getBondType() { 43 return this.type; 44 } 45 46 //以下は Eclipse により自動生成 47 @Override 48 public String toString() { 49 return "Bond [code=" + code + ", name=" + name + ", maturity=" + maturity + ", coupon=" + coupon + ", type=" 50 + type + "]"; 51 } 52 @Override 53 public int hashCode() { 54 return Objects.hash(code, coupon, maturity, name, type); 55 } 56 @Override 57 public boolean equals(Object obj) { 58 if (this == obj) return true; 59 if (obj == null) return false; 60 if (getClass() != obj.getClass()) return false; 61 Bond other = (Bond) obj; 62 return Objects.equals(code, other.code) && Double.doubleToLongBits(coupon) == Double.doubleToLongBits(other.coupon) 63 && maturity == other.maturity && Objects.equals(name, other.name) && type == other.type; 64 } 65}

test1/BondType.java

java

1package test1; 2 3public enum BondType { 4 COUPON_BOND, ZERO_COUPON_BOND 5};

test2/BondTest.java

java

1package test2; 2 3import test1.Bond; 4 5public class BondTest { 6 public static void main (String [] args) { 7 Bond bond3 = new Bond("code", "name", 20220812, 1.0); 8 System.out.println(bond3.getBondType()); 9 } 10}

実行結果

plain

1COUPON_BOND

投稿2022/08/12 08:12

編集2022/08/12 08:20
jimbe

総合スコア13209

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

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

oimo0505

2022/08/12 08:18

jimbe様 回答ありがとうございます。 enumで定義した文字列を条件(couponの値が0かどうか)によって分岐させ表示させたいのが今回の質問の要旨なのですが、Bond.javaファイル内の public String getBondType() { if (coupon == 0) { BondType.equals("ZERO_COUPON_BOND"); } else { BondType.equals("COUPON_BOND"); } return this.BondType; } は出力することができないということでしょうか。
oimo0505

2022/08/12 08:38 編集

追記 コード例まで丁寧にありがとうございます。 うまく実行できました。 String型ではなくBondTypeにするのは思いつきもしなくとても助かりました。
jimbe

2022/08/12 08:45 編集

enum BondType に定義したモノは文字列ではありません。 BondType 型のオブジェクトです。 enum BondType は以下のようなクラスとして変換されると考えれば使い方のイメージが得られるかもしれません。 public final class BondType { //ordinal は並べた順(0始まり) public static final BondType COUPON_BOND = new BondType(0, "COUPON_BOND"); public static final BondType ZERO_COUPON_BOND = new BondType(1, "ZERO_COUPON_BOND"); private int ordinal; private String name; private BondType(int ordinal, String name) { this.ordinal = ordinal; this.name = name; } public int ordinal() { return ordinal; } public String name() { return name; } @Override public String toString() { return name; } //etc・・・ }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問