###前提・実現したいこと
標準入力で指定したクラスのフィールドの型と名前と値を取得したいです。
以下のようなエラーがでて、フィールドの値が取得できないです。
どうしたらいいのでしょうか。
フィールドとフィールドの値を表示します. 検査するクラスを入力してください >sample1.Point Type : double, Name : x1, Value : java.lang.IllegalArgumentException: Can not set double field Point.x1 to java.lang.Class Type : double, Name : y1, Value : java.lang.IllegalArgumentException: Can not set double field Point.y1 to java.lang.Class Type : double, Name : x, Value : java.lang.IllegalArgumentException: Can not set double field Point.x to java.lang.Class Type : double, Name : y, Value : java.lang.IllegalArgumentException: Can not set double field Point.y to java.lang.Class
###該当のソースコード
リフレクションを使うクラスです。
java
1import java.lang.reflect.Field; 2 3public class Kensa{ 4 5 public static void main(String[] args){ 6 7 try{ 8 System.out.println("フィールドとフィールドの値を表示します."); 9 System.out.print("検査するクラスを入力してください\n>"); 10 String className = new java.util.Scanner(System.in).nextLine(); 11 Class c = Class.forName(className); 12 Field[] publicFields = c.getDeclaredFields(); 13 for(int i=0;i<publicFields.length;i++){ 14 publicFields[i].setAccessible(true); 15 String fieldName = publicFields[i].getName(); 16 Class fieldType = publicFields[i].getType(); 17 String fieldTypeStr = fieldType.getName(); 18 System.out.print("Type : "+fieldTypeStr+", Name : "+fieldName+", Value : "); 19 try{ 20 Object value = publicFields[i].get(c); 21 System.out.println(value); 22 }catch(Exception e){ 23 System.err.println(e); 24 } 25 26 } 27 }catch(ClassNotFoundException e){ 28 System.err.println("クラスが見つかりません."); 29 System.err.println(e); 30 } 31 } 32 33} 34
今回、試しに検査の対象にしたクラスです。
java
1public class Point{ 2 double x1,y1,x,y; 3}
###追記
申し訳ありません。
試しに検査の対象にしたクラスの例が悪かったです。
いくつか検査の対象にしたのですが、その中には引数なしのコンストラクタがないものもあります。
ので、引数なしのコンストラクタがあるクラスでも、あるクラスでも実行できるようにしたいです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー