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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

22452閲覧

Arraylistの使い方

nothing

総合スコア27

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2016/08/14 07:01

編集2016/08/14 08:21

jspでArrayList を使った型宣言をしているのですが、
下記箇所でWarning「 ArrayList は raw 型です。総称型 ArrayList<E> への参照は、パラメーター化する必要があります」が出ます。

<% ArrayList list = (ArrayList)request.getAttribute("list"); %>

そのため、下記のように型を記載してみたのですが、
今度はコンパイルエラー「Arraylist を変数に解決できません」「AddressAccount を変数に解決できませ
ん」が出てしまいました。

<% ArrayList<AddressAccount> list = (ArrayList)<AddressAccount>(request.getAttribute("list")); %>

Arraylistと型については、page ディレクティブのimport属性で<%@ page import = "java.util.*,servlet.AddressAccount" %>と宣言済みです。

Arraylist自体、初めて使うため、宣言の仕方がおかしいのか、書き方がおかしいのか、絞れていません。

おそらく簡単なところで躓いているのは自覚があるので、
質問を投げるのは恐縮なのですが、すみません、どう書けばよいのか、どなたかご教示ください。

ちなみに最初に書いたコーディング(①)はwarningが出るだけで、動作はします。
どうぞよろしくお願いします。

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

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

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

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

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

flied_onion

2016/08/14 07:49

コード部分は ``` で括るか、コード部分を選択して </> ボタンを押して見やすくしてください。
nothing

2016/08/14 08:13

ありがとうございます。私のところでは文字化けしているのか、書いてくださった文章が「'''」と「</>ボタン」に見えており、 どう修正すればいいのかわからなかったため、コード部分は<%%>内とお伝えさせていただきます。見えにくいようで恐縮です。
flied_onion

2016/08/14 08:17

それであってます。文字化けではありません。 質問を記入するときに 三連バッククォート( ``` )で括るか、記入欄上部の [ </> ] と見えるボタンを使ってくださいという意味です。 ・・・って思ったらボタンは変わったのですね、知りませんでしたごめんなさい。ボタンの方は 「 <code> ボタンを使ってください。」の間違いです
nothing

2016/08/14 08:22

すみません、ありがとうございます、修正できました。
guest

回答2

0

ベストアンサー

Attributeの "list"に何をセットしているかわかりませんが、
②の右辺、
(ArrayList)<AddressAccount>(request.getAttribute("list"));

というのはおかしいです。

総称型(ジェネリック)ArrayListのざっくりした説明ですが、

ArrayListはObjectを格納できるので、なんでも入ってしまいます(Objectにキャストすればいい)が、これだと取り出すときに本当に期待する型の要素が入っているのか保証がありません。

一方総称型の ArrayList<E> ( ArrayList<型名> )の場合は型名のものしか受け付けませんので取り出す側が安心して使えます。

ArrayList<E> が型になり、「Eの型しかいれられないArrayList」と考えてください ( Eの部分には 型名を書く )。

なので②の右辺は文法的には以下の様になります。
(ArrayList<AddressAccount>)request.getAttribute("list");

ただ、最初に書きましたが、 setAttributeで"list" に何を指定しているかも問題なのでそれがあっていなければエラーになります。

投稿2016/08/14 08:04

flied_onion

総合スコア2604

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

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

nothing

2016/08/14 08:38

理解しました。ありがとうございます。 修正するとwarningで「型の安全性: Object から ArrayList<AddressAccount> への未検査キャスト」と出るようになりました。 getAttributeに設定している"list"はservletのdoGetで作成したlist(ArrayList<AddressAccount>型)をsetAttributeし、その後、jspにforwardで投げています。 AddressAccountは自前のクラスです。 初心者のため、詳しくないので自信はありませんが、調べたところ、総称型は正しくキャストできても自前の場合、「未検査」warningが出るようです。 @SuppressWarnings("unchecked")を追加することでwarningを回避できるようになりました。 ArrayListについて理解が浅かったため、かなり悩んでおりました。<code>ボタンも含め、ありがとうございました。たすかりました。
flied_onion

2016/08/14 08:49

解決したようで良かったです。 > 総称型は正しくキャストできても自前の場合、「未検査」warningが出るようです。 そうですね。setAttributeもgetAttributeもObject型で受け付け、取り出しを行ってしまうので、getAttributeで取り出したときにはそれが本当はなんだったのか、javaのコンパイラでは追いかけきれないため、「キャストしてるけどそれ本当に型あってる?」という警告がでている状態です。 尚、仮に違ってもキャスト自体はうまくいってしまう事もありますが、全然関係ない型(E)だった場合、リストから要素をgetした時にエラーになります。
nothing

2016/08/16 07:21

お礼が遅くなりました。ありがとうございます。自分なりに教えてくださったことを踏まえて勉強しなおしておりました。用語にまだ慣れていないため、わかりづらい説明にもかかわらず、丁寧に教えていただき感謝です。 はい、未検査warning対策は安易に入れず、確実に文法があっているか確かめてから該当箇所のみ入れることにします。
guest

0

キャストの仕方が違いますね。
<E>もキャスト演算子の中に入れてください。

Java

1ArrayList<Hoge> hoges = (ArrayList<Hoge>) foo;

投稿2016/08/14 08:02

yona

総合スコア18155

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

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

nothing

2016/08/14 08:07

ありがとうございます。 修正してみたところ、下記warningが出力されました。 「型の安全性: Object から ArrayList<AddressAccount> への未検査キャスト」 もう少し、いろいろ試してみます。 ありがとうございます。
nothing

2016/08/16 07:23

ありがとうございました。 勉強しなおしていたため、遅くなりましたが、再度お礼申し上げます。 自身で作成したクラスを使用する際、文法があっていても未検査warningが出てほかの重要なエラーが見つけにくくなってしまうため、その場合に限り、warning対策を入れることにしました。迅速な回答を頂き、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問