小编Tom*_*mas的帖子

使用interface和Enum进行潜在打字

我有一个IDevice接口和这个接口的两个枚举实现:AndroidDeviceIosDevice.问题是:我想values()在接口引用上使用潜在的输入和调用方法:

private IDevice getDeviceByReadableName(String versionInXml, IDevice devices) {
    for(IDevice device : devices.values()){
    //...
Run Code Online (Sandbox Code Playgroud)

所以我必须添加public IDevice[] values();到我的界面:

public interface IDevice {
     //...
     public IDevice[] values();
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.Eclipse问我remove static modifiers from AndroidDevice(...)


请:

  1. 向我解释为什么它不起作用?
  2. 这个问题的最佳解决方案是什么,我应该使用反射吗?

java inheritance enums

7
推荐指数
2
解决办法
274
查看次数

面向对象的设计 - 法术

我正在开发我的第一个Java项目,这是一个基本的角色扮演游戏.现在我处理法术,我需要一些OOD指导.

我有Character,这是一个abstract class.Character有一些subclasses(如mage,fighter,rogue,cleric).

Magecleric(作为now,牧师没有法力,但它可能会改变)都拼写脚轮.

我也有一个Spell班,有一些信息(如spell name,mana cost等).MageSpellsList并且ClericSpellsList是另一个类,并且都有类法术列表.而且我也有Effects课(施放咒语应该使用它).

什么是一个很好的面向对象设计来处理法术(解决方案不应该包括Effects类,我可以稍后处理)?

也许使用"SpellCaster"界面和一些方法,比如castSpell和showSpellbook,那么Mage和Cleric会实现这个界面吗?.

也许MageSpellsList和ClericSpellsList应该是Spell的子类?我的目标是使用castSpell("spell name here")并让castSpell通过使用一个好的OOD来完成这项工作,而不是为每个法术编写一个特定的方法(并且在mage和Cleric之间没有重复的代码)

Mage.java:

public class Mage extends Character {

    private List<Spell> spellBook;
    private int mana;
    private int CurrentMana;

    public Mage(String name) {

        super(name);

        setName(name);
        setCharacterClass("Mage");
        setLevel(1);
        setHitDice(4);

        setStrength(10);
        setConstitution(10);
        setDexterity(14);
        setIntelligence(16);
        setWisdom(14);
        setCharisma(10); …
Run Code Online (Sandbox Code Playgroud)

java oop

7
推荐指数
1
解决办法
1478
查看次数

可以将父版本作为属性提供给孩子吗?

这是关于Maven POM的

如果我希望我的父版本也是我的依赖版本,我必须设置一个属性值为$ {project.parent.version}.

问题然后发生在我的主POM的一个Child(其中包含$ {project.parent.version}属性,因为它是Parent而它是一些我不管理的Project)重新计算属性并认为创建的值属性现在是我的主POM的版本.

--SuperParent (not in my Administration) | Version = 1.2.3

----MainPom | Version = 1.0.0 | Property <test>${project.parent.version}</test> -> 1.2.3

------Child Pom | Version 1.0.0 | Property ${test} is now 1.0.0
Run Code Online (Sandbox Code Playgroud)
<project>
<!-- Super Pom -->
 <groupId>groupId</groupId>
    <artifactId>artifactId</artifactId>
    <version>1.2.3</version>
</project>

<project>
<!-- MainPom -->
    <groupId>othergroupId</groupId>
    <artifactId>otherartifactId</artifactId>
    <version>1.0.0</version>
    <parent>
         <groupId>groupId</groupId>
         <artifactId>artifactId</artifactId>
         <version>1.2.3</version>
     </parent>
     <properties>
     <dependency.version>${project.parent.version}</dependency.version>
     </properties>
     <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>dependencyGroupId<groupId>
                <artifactId>dependency</artifactId>
                <version>${dependency.version}</version>
            </dependency>
        </dependencies>
     </dependencyManagement>
</project>
<project>
<!-- ChildPom -->
    <groupId>childGroupId</groupId>
    <artifactId>childArtifactId</artifactId>
    <version>1.0.0</version>
    <parent>
         <groupId>othergroupId</groupId>
         <artifactId>otherartifactId</artifactId> …
Run Code Online (Sandbox Code Playgroud)

java dependencies dependency-management pom.xml maven

7
推荐指数
1
解决办法
5324
查看次数