【问题标题】:Hardcoding values in JavaJava中的硬编码值
【发布时间】:2018-10-30 23:36:13
【问题描述】:

目前我正在尝试为 Java 中的家谱应用程序硬编码一些值。

只是需要一些关于如何去做的想法,不知道如何继续。

我还包含了构造函数类:

  public class TreeImpl {

    private FamilyMember root;

    public FamilyMember getRoot() {
        return root;
    }

    public void setRoot(FamilyMember root) {
        this.root = root;
    }

    public List<FamilyMember> getAllMembers() {
        return allMembers;
    }

    public void setAllMembers(List<FamilyMember> allMembers) {
        this.allMembers = allMembers;
        this.setRoot(this.allMembers.get(0));
    }

    private List<FamilyMember> allMembers = new ArrayList<>();

    public TreeImpl(FamilyMember root)
    {
        this.root=root;
        addMembers(root);
    }

    private void addMembers(FamilyMember node)
    {
        if(node==null) return;
        allMembers.add(node);
        addMembers(node.getFather());
        addMembers(node.getMother());
        addMembers(node.getSpouse());


        for(FamilyMember child : node.getChildren())
            addMembers(child);

    }

    public void addSpouse(int index, FamilyMember spouse)
    {
        for(FamilyMember member : allMembers)
        {
            if(member.getMemberID()==index)
            {
                member.setSpouse(spouse);
                allMembers.add(spouse);
                return;
            }
        }
    }

    public void addFather(int index, FamilyMember father)
    {
        for(FamilyMember member : allMembers)
        {
            if(member.getMemberID()==index)
            {
                member.setFather(father);
                allMembers.add(father);
                return;
            }
        }
    }

    public void addMother(int index, FamilyMember mother)
    {
        for(FamilyMember member : allMembers)
        {
            if(member.getMemberID()==index)
            {
                member.setMother(mother);
                allMembers.add(mother);
                return;
            }
        }
    }

    public void addChild(int index, FamilyMember child)
    {
        for(FamilyMember member : allMembers)
        {
            if(member.getMemberID()==index)
            {
                member.setSpouse(child);
                allMembers.add(child);
                return;
            }
        }
    }



    public FamilyMember getDetailsForMember(String member)
    {

        for(FamilyMember m : this.getAllMembers())
        {
            if(m.getFirstName().equals(member))
                return m;
        }

        return null;
    }

我的构造函数类

public class FamilyMember implements Serializable{
    private static int id=1;

    private String firstName, surName, surNameAfterMarriage, life;
    private Gender gender;
    private Address address;
    private FamilyMember mother, father, spouse;
    private int memberID;

    public boolean hasSub()
    {
        return (this.getFather()!=null || this.getMother()!=null || this.getChildren().size()>0);
    }


    public int getMemberID() {
        return memberID;
    }

    public void setMemberID(int memberID) {
        this.memberID = memberID;
    }

    private List<FamilyMember> children, grandChildren;

    public static int getId() {
        return id;
    }

    public static void incrementId()
    {
        id++;
    }


    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getSurName() {
        return surName;
    }

    public void setSurName(String surName) {
        this.surName = surName;
    }

    public String getSurNameAfterMarriage() {
        return surNameAfterMarriage;
    }

    public void setSurNameAfterMarriage(String surNameAfterMarriage) {
        this.surNameAfterMarriage = surNameAfterMarriage;
    }

    public String getLife() {
        return life;
    }

    public void setLife(String life) {
        this.life = life;
    }

    public Gender getGender() {
        return gender;
    }

    public void setGender(Gender gender) {
        this.gender = gender;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public FamilyMember getMother() {
        return mother;
    }

    public void setMother(FamilyMember mother) {
        this.mother = mother;
    }

    public FamilyMember getFather() {
        return father;
    }

    public void setFather(FamilyMember father) {
        this.father = father;
    }

    public FamilyMember(String firstName, String surName, String surNameAfterMarriage, String life, Gender gender,
            Address address) {
        super();
        this.firstName = firstName;
        this.surName = surName;
        this.surNameAfterMarriage = surNameAfterMarriage;
        this.life = life;
        this.gender = gender;
        this.address = address;
        this.memberID = this.getId();
        this.children = new ArrayList<>();
        this.incrementId();
    }


        for(FamilyMember child : this.getChildren())
        {
            text = text + " " + child.firstName;
        }

        return text;
    }

    public FamilyMember getSpouse() {
        return spouse;
    }

    public void setSpouse(FamilyMember spouse) {
        this.spouse = spouse;
    }

    public List<FamilyMember> getChildren() {
        return children;
    }

    public void setChildren(List<FamilyMember> childer) {
        this.children = childer;
    }

    public void addChild(FamilyMember child) {
        this.children.add(child);
    }


    public List<FamilyMember> getGrandChildren() {
        return grandChildren;
    }

    public void setGrandChildren(List<FamilyMember> grandChildren) {
        this.grandChildren = grandChildren;
    }


}

例如,我想添加父亲、母亲、孩子等的详细信息,所以当我运行程序时,这些值会显示出来

例如:Familymember father = new Familymember ("xyz". "xyx" )

【问题讨论】:

  • 你有什么疑问?
  • 我不确定如何硬编码这些值。有任何想法吗?我在哪里添加它?
  • 你的意思是如何处理“xyz”?
  • 从文件中加载怎么样?也许来自 xml 或类似的东西。这样一来,您就可以在应用程序之外看到您的树,而无需触摸您的代码来更改它。
  • 是的。我想为每个家庭成员创建一个具有自定义值的新构造函数,但是我如何以及在哪里添加这个

标签: java testing defaultmutabletreenode


【解决方案1】:

您可以使用构造函数设置值,

public FamilyMember (Gender gen,Address add,FamilyMember fmm,FamilyMember fmf,FamilyMember fms,int mId){
            this.gender = gen;
            this.address = add;
            this.mother = fmm;
            this.father = fmf;
            this.spouse = fms;
            this.memberID = mId;
        }

它将使用硬编码值设置 FamilyMember 对象,

FamilyMember fm = new FamilyMember(Gender.MALE,add,fmm,fmf,fms,menId);

如果有任何疑问,请告诉我。

【讨论】:

  • 我可以像这样创建构造函数:FamilyMember Father = new FamilyMember ("a'', "b", "c", "d"); 我明白这一点,但是我该如何插入它在节点中?
  • 嗯,你可以创建,但基于对象只有你可以创建。 FamilyMember 父亲 = new FamilyMember ("a'', "b", "c", "d") 它不会接受这种类型。你可以根据你如何初始化变量来创建构造函数。
  • 它是硬编码的。但是我如何将它实现到程序中呢?喜欢 .add (fm)
  • 删除硬编码的值,然后传递你想要绑定的尊重对象
  • 请提供任何样品:)
【解决方案2】:

如果你真的想通过构造函数来实现,你可以这样做:

// Secondary constructor
public FamilyMember() {
    this("Paul", "Stevenson", ...); // calls the primary constructor
}

public FamilyMember(String firstName, String surName, String surNameAfterMarriage, String life, Gender gender,
            Address address) {
    // your primary constructor
}

不幸的是,这不是很灵活。另一种方法是使用静态方法:

public static FamilyMember familyMemberSteve() {
    return new FamilyMember("Steve", ...)
}

但老实说,我也不推荐这个。就像我在评论中说的那样,使用 XML 或其他格式会更好,因为它会更灵活。

【讨论】:

    【解决方案3】:

    在 FamilyMember 类中创建一个静态方法,该方法创建一个族,然后在初始化 TreeImpl 对象之前调用此方法。

    public static FamilyMember createFirstFamilyNode() {
        FamilyMember mother = new FamilyMember("Mother", ...);
        FamilyMember father = new FamilyMember("Father", ...);
    
        mother.setSpouce(father);
        FamilyMember child1 = new FamilyMember("First Child", ...);
        mother.addChild(child1);
    
        // And so on for rest of family members
    
        return mother;
    }
    

    【讨论】:

    • 我想你在应用程序第一次与树一起加载时调用了这个方法。
    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多