タイトルが示すように、LuaJava と EnumMap に問題があります。私は RPG ライブラリを実行しようとしているので、いくつかの属性とそれらのリストを持つキャラクターがあります。以下のコードでは、重要なことだけを報告します。
AbstractAttribute を拡張する ConcreteAttribute というクラスがあります。これには、String と 2 つの int を持つコンストラクターがあります。
public abstract class AbstractAttribute {
protected String name;
protected int baseValue;
protected double baseMolt;
public AbstractAttribute(String name, int valoreBase, double moltBase){
this.name = name;
this.baseValue = valoreBase;
this.baseMolt = moltBase;
}
/*Getters and Setters*/
}
次に、RPG ゲームでの統計を表す StatType という Enum があります。
public enum StatType {
HP, MP, Attack, Defense;
}
私は PlayableCharacter と呼ばれるクラスも持っています (重要なことだけを報告します):
public abstract class PlayableCharacter extends Character{
protected EnumMap<StatType, ConcreteAttribute> statistiche;
//Constructor
public EnumMap<StatType, ConcreteAttribute> getStatistiche(){
return statistiche;
}
Map の「put」メソッド。
新しいキャラクターを作成するために、私は現在これを行っています (「Eroe」は PlayableCharacter を拡張します):
public static void main(String[] args) {
PlayableCharacter pers = new Eroe("Eroe 1");
ConcreteAttribute atk = new ConcreteAttribute("Attacco", 20, 0);
pers.getStatistiche().put(StatType.Attacco_Fisico, atk);
}
正常に動作しますが、多くの ConcreteAttribute と多くの Character がある場合、これが最善の解決策ではないと思います。だから私は、このようにLuaを使ってキャラクターの「具体的な」インスタンスを作成することを考えていました(小さな例):
-- Eroe 1.lua
function create(eroe)
eroe:setName("Eroe 1")
attributes = luajava.bindClass("personaggi.attributi.StatType")
attacco = luajava.newInstance("personaggi.attributi.ConcreteAttribute", "Attacco", 20, 0)
eroe:getStatistiche():put(attributes.Attacco_Fisico, attacco)
end
しかし、次のエラーが表示されます: PANIC: Lua API の呼び出しで保護されていないエラーが発生しました (nil 値を呼び出そうとしました)。問題は最後の行にありますが、私は Lua に本当に慣れていないので、Lua が EnumMap を処理できるかどうかさえわかりません。
これに対する解決策はありますか?
皆さんありがとう、そして私の下手な英語でごめんなさい^^
編集: コードを編集しましたが、エラーが見つかりました