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

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

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

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

リフレクション

リフレクションとは、プログラムの実行過程でプログラム自身の構造を読み取り、編集する事が出来るプロセスのことを指します

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

13651閲覧

【Java】リフレクションでList型を扱いたい

fireflydeath912

総合スコア18

Java

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

リフレクション

リフレクションとは、プログラムの実行過程でプログラム自身の構造を読み取り、編集する事が出来るプロセスのことを指します

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2015/06/16 00:29

リフレクションを用いてList<WebElement>を取得し、1つずつWebElementの変数に格納したいです。

私は今、Selenium WebDriverとJavaとJunitでWebテストの自動化をしています。

同じidを持つ属性をList型で複数のWebElementを保持しているので、そのフィールドをリフレクションを使って操作したいと思っています。

lang

1public WebElement getElement(String args)throws Exception{ 2 WebElement target = null; 3 Field element = this.getClass().getField(args); 4 List<WebElement> targets = //ここでList<WebElement>に変換したい。 5 target = targets.get(0); 6 return target; 7 }

リフレクションで扱いは不可能なのでしょうか?
可能でしたら、教えてください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

リフレクション対象のオブジェクトがどれなのかが書かれていないので、仮にxを対象とすると、これでアクセスできると思います。

lang

1 Object x = ... ; // リフレクション対象のオブジェクト 2 Field element = x.getClass().getDeclaredField(args); 3 element.setAccessible(true); 4 @SuppressWarnings("unchecked") // コンパイラー警告の抑止 5 List<WebElement> targets = (List<WebElement>)element.get(x);

投稿2015/06/16 00:46

編集2015/06/16 00:47
argius

総合スコア9388

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

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

fireflydeath912

2015/06/16 01:08

導入してみたところ見事にとってくることができました!! ありがとうございます!
guest

0

こんな感じでしょうか
https://ideone.com/PbPvAw

リフレクションは柔軟ですが、
遅くて複雑でバグりやすいのでよほどのことがない限り
使わないことをお勧めします。

ほとんどの場合リフレクション使う必要はないですし、
リフレクションしたい場合もApacheCommonsのPropertyUtilsとか
使えば十分だったりします。

ただ、勉強目的ならば実装するのはとてもいいことだと思います。

import java.util.*; import java.lang.*; import java.lang.reflect.Field; class WebElement { public WebElement(String id) { this.id = id; } private String id; public String getId() { return this.id; } } class Program { public List<WebElement> elem1 = new ArrayList<WebElement>(); public List<WebElement> elem2 = new ArrayList<WebElement>(); public Program() { this.elem1.add(new WebElement("id1")); this.elem2.add(new WebElement("id2")); } public WebElement getElement(String name) throws Exception { Field field = this.getClass().getField(name); List<WebElement> targets = (List<WebElement>)field.get(this); return targets.get(0); } public static void main (String[] args) throws java.lang.Exception { Program prog = new Program(); try{ System.out.println(prog.getElement("elem1").getId()); System.out.println(prog.getElement("elem2").getId()); }catch(Exception e){ System.out.println(e); } } }

投稿2015/06/16 01:20

take4s5i

総合スコア68

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問