私はマルチプレイヤーゲームサーバーを作成しています。ファイルからすべてのワールドデータを動的にロードしたいと思います。これらのファイルは、オブジェクトの配列を動的にロードする必要があります。ファイルからロードするオブジェクトは約3〜4種類あり、コンストラクタ引数の長さは不明です。引数の長さが未知のコンストラクタを呼び出す
保存されたファイルの例:配列に分割されます
arg1, arg2, arg3, arg4
が
[arg1, arg2, arg3, arg4]
次にそれらの引数ここ
new NPC(arg1, arg2, arg3, arg4)
持つコンストラクタを呼び出す必要があります方法です私は今すぐ持っている
文字列の配列を取るすべてのクラスでpublic static <T> T[] load(String path, Class<T> type) ...
宣言コンストラクタ:
public static <T> void load(String path, Class<T> type) {
path = dataDir + path;
String content = Util.readFile(path);
String[] lines = content.split("\n");
// T[] result = new T[lines.length]; Type paramater 'T' can not be instantiated directly.
for (int i = 0; i < lines.length; i++) {
String[] args = lines[i].split(", ");
// result[i] = new T(args[0], args[1]...); Should add a T to the array with args 'args'
}
// return result
}
そして、それはこの
Npc[] npcs = DataLoader.load("npcs.dat");
これは情報が不十分です。議論の種類は何ですか?リフレクションで型をインスタンス化するためにあなたが書いたコードは何ですか?何がうまくいかない?自分で行うには、引数の型を知ってから、適切なコンストラクタを検索するためにリフレクションを使用し、それを呼び出す必要があります。これはJavadocとさまざまなチュートリアルでカバーされていますが、Javadocだけで十分理解できるはずです。 –
あなたはここで車輪を再発明しようとしているようです。 'ObjectOutputStream'と' ObjectInputStream'でシリアル化をチェックアウトしましたか? –
まあ、引数はすべてファイルに文字列として格納されているので、文字列から変換することはすべて可能です。引数の型は整数と文字列だけです。また、すべてのオブジェクトは1つのコンストラクタしか持たないので、引数の型が何であるかを調べ、文字列をその型に自動的に変換したいと考えています。 あなたのコメントがAndrewになったときにこれを入力したところで、私はそれを試してみます。 –