0

メインに書き込むことでインスタンスを作成する方法を知っています...

Class newObject = new Class();

ユーザーの入力によって「newObject」を作成し、新しいnewObjectをポップする方法はありますか?スキャナーを使って考えていたのですが、どうすればいいのかわかりません。私はこのように推測していました:

Scanner sc = new Scanner(System.in);
Class sc.next(); = new Class();

またはこのように?

Scanner sc = new Scanner(System.in);
(some name) = sc.next();
Class (some name) = new Class();

したがって、ユーザーがオブジェクト名(ある名前)をスキャナーに入力すると、そのオブジェクト名(ある名前)が作成されます。

事前にどうもありがとうございました!

4

3 に答える 3

0

クラスコードにアクセスでき、値を入力できる場合は、Scannerクラスを取り込んでClassを作成するコンストラクターを作成するのが最善の方法です。

Class testClass{

  testClass(Scanner input)
  {
    //Populate the class.
  }

}

Classがプリミティブの場合、nextInt(または他の関連する)型関数を使用できます。

于 2012-11-18T11:27:11.647 に答える
0

次のように、目的に応じてリフレクションを使用できます。

ClassLoader classLoader = ClassLoader.getSystemClassLoader();
String className = sc.next()
Class userClass = classLoader.loadClass(className);
Object classInstance = userClass.newInstance();

クラスローダーは、その名前の状態として使用されます:クラスをロードするため。クラスの名前を指定するだけで、このクラスが実行可能ライブラリ(つまり、jarファイルまたはクラス)内またはプロジェクトビルドパス内にある場合は、必要なクラス(インスタンスではない)が作成されます。

このクラスを使用してインスタンスを作成するよりも、目的のクラス実装を持つ一般的なオブジェクトになります

于 2012-11-18T11:28:47.160 に答える
0

Apache CommonsのBeanUtilsを使用して、これを行うメソッドを作成できます。私は以前に次のようなことをしました。

    public <T> T bindBean(String[] line, Class<T> cls) throws Exception {
        T newInstance = cls.newInstance();
        Map<String, Object> properties = BeanUtils.describe(newInstance);
        Field[] format = cls.getDeclaredFields();
        for (int i = 0; i < format.length; i++) {
            properties.put(format[i].getName(), line[i]);
        }
        BeanUtils.populate(newInstance, properties);

        return newInstance;
    }

上記のようなメソッドを作成してから、スキャナーからline[]パラメーターを渡すことができます。または、メソッド内から値を取得できます。それはただの好みです。

私は自分の主張を示したいだけで、それらを処理したくないので、ここで例外をスローしました。これがあなたが探しているものであることを願っています。

于 2012-11-19T08:01:00.453 に答える