用许多变量构造java类的更好方法

用许多变量构造java类的更好方法,java,Java,我有一个名为Player的java类。关于播放器文件如何与服务器交互的机制需要很多解释,我对该文件没有任何问题,我只是想改进它,提高我的编程技能。所以我的问题是,我将如何利用我拥有的许多变量,int、string、boolean,使代码更快、更高效/更干净。下面是一个示例,您可以看到该文件的外观 enter code here public boolean usingGlory = false; public int[] woodcut = new int [3]; public

我有一个名为Player的java类。关于播放器文件如何与服务器交互的机制需要很多解释,我对该文件没有任何问题,我只是想改进它,提高我的编程技能。所以我的问题是,我将如何利用我拥有的许多变量,int、string、boolean,使代码更快、更高效/更干净。下面是一个示例,您可以看到该文件的外观

enter code here
       public boolean usingGlory = false;
public int[] woodcut = new int [3];
public int wcTimer = 0;
public int[] mining = new int [3];
public int miningTimer = 0;
public boolean fishing = false;
public int fishtimer = 0;
public int fishXP;
public int fishies = 0;
public int fishreqt = 0;
public int fishitem = 0;
public int fishemote = 0;
public int fishies2 = 0;
public int fishreq2 = 0;
public boolean isfishing = false;
public boolean attemptingfish = false;
public int smeltType; //1 = bronze, 2 = iron, 3 = steel, 4 = gold, 5 = mith, 6 = addy, 7 = rune
public int smeltAmount;
public int smeltTimer = 0;
public boolean smeltInterface;
public boolean patchCleared;
public int[] farm = new int[2];
public boolean antiFirePot = false;
public boolean Lattack = false;
public boolean Lranged = false;
public boolean Lmagic = false;
public boolean Ldefense = false;
public boolean Lstrength = false;
public boolean Lspecial = false;
public boolean inPits = false;
public int pitsStatus = 0;      
public boolean inFunPk = false;
public boolean InDung = false;

您可以将数据分解为几个类,每个类都包含特定区域的信息

例如,这里有一组与捕鱼相关的变量-这些变量可以分组为
FishingComponent
类。还有一组关于熔炼的信息,可以分成
meltingcomponent
类,以此类推。这可以通过将密切相关的信息和功能分组到它们自己的类中,从而使代码更具可读性

出于可重用性的考虑,您可能希望使用实体组件系统。它们在游戏编程中很受欢迎,因为它们允许对象的组成不仅仅是继承,还可以定制。例如,如果存在一个NPC,该NPC可能保存有关捕鱼的信息,但没有统计信息,则可以将捕鱼组件添加到NPC实体中,并且可以重复使用与捕鱼相关的所有代码


您还提到加快代码的速度-除非您有特定的性能问题,否则您可能试图过早地优化代码。但是,如果需要对池对象进行大量垃圾收集,您可能希望研究池对象,就像在用垃圾收集语言编写的游戏中一样,垃圾收集周期可能是导致FrameDrop的最大原因之一。

您可能希望应用两种常见的OOP技术:封装和合成。首先,在你的类中有一堆
public
字段是不好的做法。相反,使用getter和setter方法封装它们。以下是前两个变量的示例:

private boolean usingGlory = false;

public boolean isUsingGlory() {
    return usingGlory;
}

public void setUsingGlory(boolean using) {
    usingGlory = using;
}

private int[] woodcut = new int[3];

public int[] getWoodcut() {
    return woodcut;
}

public void setWoodcut(int[] woodcut) {
    this.woodcut = woodcut;
}
public class Player {
    //...

    private FishingState fishingState = new FishingState();

    //Getter and setter

    //...
}

public class FishingState {

    private boolean fishing = false;
    private int timer = 0;
    private int XP;
    private int fishies = 0;
    private int reqt = 0;
    private int item = 0;
    private int emote = 0;
    private int fishies2 = 0;
    private int req2 = 0;

    //Getters and setters

    //A constructor and some methods:
    public FishingState(int XP) {
        this.XP = XP;
    }

    public void resetTimer() {
        timer = 0;
    }

}
有关详细信息,请参阅

第二种技巧是构图。你不喜欢类中有这么多变量是对的。与其让所有变量都成为
Player
类的一部分,不如将它们分组到包含相关项的类中。您甚至可以在适当的时候对方法进行分组!下面是一个使用钓鱼变量的示例:

private boolean usingGlory = false;

public boolean isUsingGlory() {
    return usingGlory;
}

public void setUsingGlory(boolean using) {
    usingGlory = using;
}

private int[] woodcut = new int[3];

public int[] getWoodcut() {
    return woodcut;
}

public void setWoodcut(int[] woodcut) {
    this.woodcut = woodcut;
}
public class Player {
    //...

    private FishingState fishingState = new FishingState();

    //Getter and setter

    //...
}

public class FishingState {

    private boolean fishing = false;
    private int timer = 0;
    private int XP;
    private int fishies = 0;
    private int reqt = 0;
    private int item = 0;
    private int emote = 0;
    private int fishies2 = 0;
    private int req2 = 0;

    //Getters and setters

    //A constructor and some methods:
    public FishingState(int XP) {
        this.XP = XP;
    }

    public void resetTimer() {
        timer = 0;
    }

}

现在,
player.fishemote=3
变成了
player.getFishingState().setEmote(3)
。更长,但更清晰。

Hmm,这个问题可能更适合于@markspace。当您查看变量的名称时,似乎存在冗余。您可能需要考虑重新设计和添加更多的类。代码审查可能是发布和学习的好地方。是的,这个源代码,整个服务器实际上是由其他人在某个时间点上构建的,我正在使用它并重做许多他们的“坏代码”并进行改进。感谢您的输入。我一定要研究一下作文。我知道我将要面对的问题是,游戏是由其他人在某个时间点创建的,因此有大约100个文件使用这个文件,所以我有很多编辑要做哈哈。@在封装方面有偏差,许多IDE可以为您进行封装,并相应地更新其他文件。