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

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

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

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

Q&A

解決済

3回答

782閲覧

インスタンス作成エラー

ZONO

総合スコア7

Java

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

0グッド

0クリップ

投稿2022/11/17 02:39

編集2022/11/17 02:46

前提

Javaでフォロー機能追加をしようとしていますがうまくいきません。
followメソッドのFollowViewインスタンス作成している際にエラーが発生しています。

発生している問題・エラーメッセージ

コンストラクター FollowView(null, EmployeeView, Employee) は未定義です

該当のソースコード

public void follow() throws ServletException, IOException { //フォローしている(ログインしている)人 EmployeeView followerEv = (EmployeeView) getSessionScope(AttributeConst.LOGIN_EMP); Employee followerE = EmployeeConverter.toModel(followerEv);       //フォローされる人 EmployeeView followEv = service.findOne(toNumber(getRequestParam(AttributeConst.EMP_FOLLOWER))); Employee followE = EmployeeConverter.toModel(followEv);    //インスタンス作成  **_↓該当箇所_** FollowView fv = new FollowView( null,//Idを自動生成 followEv, followerE ); } }

###関連コード1

package actions.views; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import models.Employee; /** * 従業員情報について画面の入力値・出力値を扱うViewモデル * */ @Getter //全てのクラスフィールドについてgetterを自動生成する(Lombok) @Setter //全てのクラスフィールドについてsetterを自動生成する(Lombok) @NoArgsConstructor //引数なしコンストラクタを自動生成する(Lombok) @AllArgsConstructor //全てのクラスフィールドを引数にもつ引数ありコンストラクタを自動生成する(Lombok) public class FollowView { /** * id */ private Integer id; /** * フォローされる人 */ private Employee follow; /** * フォローした人 */ private Employee follower; }

###関連コード2

package actions.views; import java.util.ArrayList; import java.util.List; import models.EmployeeFollow; /** * 従業員データのDTOモデル⇔Viewモデルの変換を行うクラス * */ public class FollowConverter { /** * ViewモデルのインスタンスからDTOモデルのインスタンスを作成する * @param ev EmployeeViewのインスタンス * @return Employeeのインスタンス */ public static EmployeeFollow toModel(FollowView fv) { return new EmployeeFollow( fv.getId(), fv.getFollow(), //フォローされた人 fv.getFollower());//フォローした人 } /** * DTOモデルのインスタンスからViewモデルのインスタンスを作成する * @param e Employeeのインスタンス * @return EmployeeViewのインスタンス */ public static FollowView toView(EmployeeFollow f) { if(f == null) { return null; } return new FollowView( f.getId(), f.getFollow(), f.getFollower()); } /** * DTOモデルのリストからViewモデルのリストを作成する * @param list DTOモデルのリスト * @return Viewモデルのリスト */ public static List<FollowView> toViewList(List<EmployeeFollow> list) { List<FollowView> evs = new ArrayList<>(); for (EmployeeFollow f : list) { evs.add(toView(f)); } return evs; } /** * Viewモデルの全フィールドの内容をDTOモデルのフィールドにコピーする * @param e DTOモデル(コピー先) * @param ev Viewモデル(コピー元) */ public static void copyViewToModel(EmployeeFollow f, FollowView fv) { f.setId(fv.getId()); f.setFollow(fv.getFollow()); f.setFollower(fv.getFollower()); } }

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

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

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

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

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

m.ts10806

2022/11/17 02:42

質問は編集できますので
pig_vba

2022/11/17 02:45

読みにくすぎるので質問の編集で質問側に追記してください。これでは回答したくても回答できない可能性が高まります
ZONO

2022/11/17 02:47

質問欄の文字数の限界を勘違いしてました。 失礼しました。 修正しました。
m.ts10806

2022/11/17 02:57

1万字だったと思います。 投稿できないときはその旨のバリデーションエラーが画面に表示されるので、 できるところまで突っ込んで良いかと思いますが、 現象再現する簡潔なコードを別で作り直しても良いかもしれません。 ミニマムコードで良ければそこまで行数要りませんから。
jimbe

2022/11/17 17:05

EmployeeView は Employee なんでしょうか。
guest

回答3

0

ベストアンサー

Lombok の @AllArgsConstructor を付けているので3引数のコンストラクタは存在するのかもしれませんが、その第一引数は int なので null は渡せません。
現在のコードには「//Idを自動生成」という機能があるようには見えないので、そういうコンストラクタを足すか、ここで具体的なidを渡すかしないといけないのでしょう。

投稿2022/11/17 03:11

int32_t

総合スコア20856

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

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

0

FollowViewクラスは定義を見た感じ、フィールドとゲッターセッターのみを持ったクラスのようですね。
ModelやFormのような役割ではないでしょうか。
「従業員情報について画面の入力値・出力値を扱うViewモデル」というコメントから後者でしょうかね。

いずれにしてもコンストラクタの定義も書かれていないので引数ありでインスタンス化はできません。
「Viewモデル」がどういう意図の表現か分かりませんが、使い方としては
引数なしでnewし、それぞれ値をセッターで設定、もしくはゲッターで取得する実装になるのではないでしょうか。

呼び出し元を変更しないのであれば、呼び出し元にあわせたコンストラクタを定義し、コンストラクタ内でセッターを呼び出してそれぞれ設定することになるのではと。

投稿2022/11/17 02:53

m.ts10806

総合スコア80850

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

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

m.ts10806

2022/11/17 02:58

インデントがかなりグチャグチャなので、揃えるようにしましょう。 テキストエディタではなく、コードフォーマット機能の付いたIDE(Eclipseなど)が推奨です。
guest

0

java

1public void follow() throws ServletException, IOException { 2 3 4 //フォローしている(ログインしている)人 5 EmployeeView followerEv = (EmployeeView) getSessionScope(AttributeConst.LOGIN_EMP); 6 Employee followerE = EmployeeConverter.toModel(followerEv); 7   8   //フォローされる人 9 EmployeeView followEv = 10 service.findOne(toNumber(getRequestParam(AttributeConst.EMP_FOLLOWER))); 11 Employee followE = EmployeeConverter.toModel(followEv); 12 13   //インスタンス作成  **_↓該当箇所_** 14 FollowView fv = new FollowView( 15 null,//Idを自動生成 16 followEv, 17 followerE 18 ); 19 } 20}

}多くないですか?閉じちゃいけないスコープまで閉じちゃってませんか?

投稿2022/11/17 02:52

pig_vba

総合スコア807

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

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

m.ts10806

2022/11/17 02:55

followメソッドを含んだクラスが提示されてないので何とも言えませんが、カッコの対応があってないのでしたら、そもそもコンパイルエラーになり実行すらできず、提示のエラーが起きている箇所には辿り着きません。
pig_vba

2022/11/17 03:00 編集

「なんかわからんけどエラー直った」で別の}を消して辻褄が合ってしまうのは初心者あるあるだと思ってるので可能性としてはあり得るかなーと
m.ts10806

2022/11/17 03:16

インデントは大事という話でしたね。
ZONO

2022/11/17 05:29

ありがとうございました。 インデント意識します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問