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

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

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

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

Q&A

解決済

インスタンス作成エラー

ZONO
ZONO

総合スコア4

Java

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

3回答

0グッド

0クリップ

362閲覧

投稿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()); } }

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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 なんでしょうか。

回答3

3

ベストアンサー

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

投稿2022/11/17 03:11

int32_t

総合スコア17258

Crimson_Tide, pig_vba, m.ts10806👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

1

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

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

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

投稿2022/11/17 02:53

m.ts10806

総合スコア80038

spoofy_dragon👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

2022/11/18 12:09

こちらの回答が他のユーザーから「質問に対する回答となっていない投稿」という指摘を受けました。

回答へのコメント

m.ts10806

2022/11/17 02:58

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

1

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

総合スコア670

spoofy_dragon👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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