Java加载XML未知类类型

预兆

我目前在业余时间使用Java的Mario-esque平台程序,作为尝试我没有经验的概念的方法。其中之一是将信息加载和存储在XML文件中,以便游戏可以从理论上讲,最终用户或编辑工具可以修改它们,而无需提供源代码/重新编译游戏。

到目前为止,我已经相当成功,但是我完全不确定该如何进步。我正在尝试从XML文件加载将在某个级别上找到的实体。XML文件当前包含其他信息,例如地图位置和播放器生成点,这些信息可以使用w3c文档对象模型正常工作。

我的困难来自以下事实:我需要从文件中加载多种类型的实体(特殊块,怪兽等),并且我真的不希望每次都在加载器方法中进行硬编码,这样当添加了新类,例如Monster3.java,我可以简单地在XML文件中添加几行,而无需编辑loader方法即可创建Monster3s。

这是我的关卡文件的当前格式:

<level>
    <map>data\level2.tmx</map>

    <player file="data\player.xml">
        <x>0</x>
        <y>48</y>
    </player>

    <entities>
        <entity type="monster1" file="data\monster1.xml">
            <x>48</x>
            <y>48</y>
        </entity>

        <entity type="monster1" file="data\monster.xml">
            <x>96</x>
            <y>48</y>
        </entity>    
    </entities>
</level> 

仅出于一些背景信息,所有这些怪物都扩展了一个中心的Entity类。他们所有人都有自己的构造函数来设置该类型的怪物的详细信息,该怪物使用提供的相同参数(表示文件位置的字符串和具有起始位置的Vector2)调用super。我不希望被传递代码,我只是想朝正确的方向前进。

坦美帕蒂

您在这里寻找的是“反射”

//Fully qualified name
String typeName = "com.yourcompany.product.Monster3";

try {
    //Class from name
    Class<?> myClass = Class.forName(typeName);

    //Constructor from Parameter types...
    Class<?>[] types = {Double.TYPE, String.class};
    Constructor constructor = myClass.getConstructor(types);

    //Instance from Parameter values...
    Object[] parameters = {new Double(0), "Hello"};
    Object instanceOfMyClass = constructor.newInstance(parameters);

} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
    ex.printStackTrace();
}

注意
这里的一个重要问题是类型安全。
当您的软件变大时,调试将变得越来越困难。
因此,我建议使用“抽象工厂”模式,该模式似乎适合您的用例。
同样,明智的是花一些时间来实现类型安全的抽象工厂(使用当然的泛型),以使以后的工作变得更轻松。

希望这可以帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java加载XML未知类类型

来自分类Dev

上限类型未知的类

来自分类Dev

返回未知类型的Java

来自分类Dev

Selenium Webdriver:由于未知的返回类型,可重用的xml解析类方法不起作用

来自分类Dev

在ColdFusion11中使用Java类-CreateObject函数的Java对象类型未知

来自分类Dev

如何从Java中的类路径加载“ context.xml”?

来自分类Dev

IEnumerable <T>未知类型保留类信息

来自分类Dev

类类型未知时调用成员函数

来自分类Dev

IEnumerable <T>未知类型保留类信息

来自分类Dev

未知类型的 Kotlin 类作为方法参数

来自分类Dev

Java:如何重建未知的类

来自分类Dev

动态类加载 Scala 类型

来自分类Dev

JAXB绑定从非抽象XML类型生成抽象Java类

来自分类Dev

Spring xml与Java Config中的类类型注入

来自分类Dev

AxiomSoapMessageCreationException:未知的内容类型“ application / wsdl + xml”

来自分类Dev

Android XML RSA,错误:java.security.InvalidKeyException:传递给RSA的未知密钥类型

来自分类Dev

在Mac终端上运行Java类-错误:找不到或加载主类类型

来自分类Dev

Java类加载

来自分类Dev

Java类加载

来自分类Dev

Java类加载

来自分类Dev

JAVA中的类加载

来自分类Dev

Java 类转换异常,使用 javax xml 提供程序时出现类加载器错误?

来自分类Dev

Eclipse无法加载javadoc(“ <类名称>的未知javadoc格式”)

来自分类Dev

Java确定类的类型

来自分类Dev

Java-转换为未知类型

来自分类Dev

Java Netty未知SSL内容类型错误

来自分类Dev

Java的类实例数量未知

来自分类Dev

Java如何将已加载的类参数类型作为通用参数传递?

来自分类Dev

Proguard在Parcelable类中导致RuntimeException(解组未知类型代码)

Related 相关文章

热门标签

归档