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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

1778閲覧

独自クラスの中にある独自クラスの値を取得したい

mint001

総合スコア8

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2021/11/19 10:19

前提

EventDataクラス型のリストがあります
その中にある通知データ(noticeData)は
DataInformationクラスの内容が入っています

実現したいこと

n番目のEventDataクラスにあるDataInformationクラスのnoticeData
の内容を取得したい

該当のソースコード

java

1public class EventData { 2 3 /** イベントID */ 4 private Long EventId; 5 6 /** イベントデータ */ 7 private String eventType; 8 9 /** 通知データ */ 10 private Object noticeData; 11}

java

1public class DataInformation { 2 3 /** データ種別 */ 4 private String DataType; 5 6 /** 通知データのファイル名 */ 7 private String fileName; 8 9 /** 通知データの内容 */ 10 private String noticeFileData; 11 12}

試したこと

eventGetNoticeData.getNoticeData().getNoticeFileData()
で取得しようとしたけどできませんでした

補足情報(FW/ツールのバージョンなど)

jdk1.8

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

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

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

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

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

BeatStar

2021/11/19 10:28

> eventGetNoticeData.getNoticeData().getNoticeFileData()で取得しようとしたけどできませんでした 質問にあるコードでってこと? もしそうなら当たり前です。 そもそもgetなんちゃらが定義されていないから。 それと、エラーメッセージが出ているならメッセージも読みましょう。 エラーメッセージはコンパイラ等からのメッセージです。
Crimson_Tide

2021/11/19 10:28

ソースは全部掲載してください。
BeatStar

2021/11/19 10:32

プログラミングは『こう書けばいい』というものではありません。 ある意味、小説のようなものです。 それを『羅生門に、「な」という字がありますが、どういう意味でしょうか』的な質問と同じです。 文脈や使われている単語とかにもよるだろ…って感じですよね。 それと一緒です。 コード一つだけ出されても、文脈とかそういうのによって変わってくるのに…
dodox86

2021/11/20 00:05

既に回答をいただいていますが、「提示のコードをもとに、動作するように修正せよ。」という課題なのでは?
guest

回答2

0

ベストアンサー

DataInformationとEventDataはgetterとsetterを端折って書いているものと想定して回答します。

とりあえず、以下の実装を眺めて見てほしいです。

Java

1package Tera20211122; 2 3import java.util.ArrayList; 4import java.util.List; 5 6public class Main { 7 8 public static void main(String[] args) { 9 10 // 恐らく取得しようとしているデータの入った箱 11 List<EventData> list = new ArrayList<EventData>(); 12 13 // 前提データの生成 14 // 内容は適当 15 for(int i = 0; i < 100; i++) { 16 DataInformation dataInformation = new DataInformation(); 17 dataInformation.setDataType("hoge"); 18 dataInformation.setFileName("hogeFile"); 19 dataInformation.setNoticeFileData("通知データ" + i); 20 21 EventData eventData = new EventData(); 22 eventData.setEventId((long)i); 23 eventData.setEventType("eventHoge"); 24 eventData.setNoticeData(dataInformation); 25 26 list.add(eventData); 27 } 28 29 //n番目のEventDataクラスにあるDataInformationクラスのnoticeDataの内容を取得したい 30 int n = 10; // 0開始にご注意 31 32 // やりたい事への回答 33 Object eventGetNoticeData = list.get(n).getNoticeData(); 34 if ("DataInformation".equals(eventGetNoticeData.getClass().getSimpleName())) { 35 DataInformation dataInformation = (DataInformation)eventGetNoticeData; 36 System.out.println(dataInformation.getNoticeFileData()); 37 } else { 38 // DataInformation以外だった場合の処理 39 } 40 } 41}

実行結果

通知データ10

回答のポイントを説明します。

まず、リストという事ですので、リストから取得する実装が必要です。
上記の参考からですと、

Java

1Object eventGetNoticeData = list.get(n).getNoticeData();

の部分になります。

次のポイントは「型」です。
EventData.noticeDataは「Object」型です。
Object型にgetNoticeFileData()というメソッドは実装されていません。
ただ前提として、noticeDataはDataInformationのオブジェクトがあるという事ですので、
キャストが可能と思います。
それが

Java

1DataInformation dataInformation = (DataInformation)eventGetNoticeData;

の部分になります。

如何でしょうか。

ちなみに、

Java

1if ("DataInformation".equals(eventGetNoticeData.getClass().getSimpleName())) {

の部分は、noticeDataは必ずしもDataInformationではない、という想定で判定処理を入れています。
仕様によっては不要です。

投稿2021/11/21 20:31

TetsujiMiwa

総合スコア1124

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

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

0

getNoticeData() と getNoticeFileData() は自前で実装してください。
また、EventData クラスの noticeData のデータ型は、Object から DataInformation に変更すべきです。

Java

1public class EventData { 2 3 /** 通知データ */ 4 private DataInformation noticeData = new DataInformation(); 5 6 public DataInformation getNoticeData() { 7 return noticeData; 8 } 9} 10 11public class DataInformation { 12 13 /** 通知データの内容 */ 14 private String noticeFileData = "あいうえお"; 15 16 public String getNoticeFileData() { 17 return noticeFileData; 18 } 19} 20 21public class Main { 22 23 public static void main(String[] args) { 24 25 // n番目のEventData 26 EventData eventGetNoticeData = new EventData(); 27 28 String data = eventGetNoticeData.getNoticeData().getNoticeFileData(); 29 System.out.println(data); 30 } 31}

投稿2021/11/19 11:34

momodx

総合スコア185

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問