2

我对java非常陌生,为了让我的脚有点湿,我正在尝试为我的妻子和我建立一个简单的预算计划。我有很多课程,我仍在学习组织,但我对这个线程的主要问题是关于我的界面。

它看起来像这样:

package com.budgeter;

public interface Category {

void setPersonalLoan(int budget);
void setDonationsGifts(int budget);
void setRecreation(int budget);
void setHouseHoldItems(int budget);
void setUtilities(int budget);
void setSavings(int budget);
void setGroceries(int budget);
void setAutoInsurance(int budget);
void setAutoPayment(int budget);
void setHomeInsurance(int budget);
void setHomePayment(int budget);

}

我不知道这个界面是否根据最佳实践完成,但我的目标是有一种方法来定义一组类别。接下来,我有另一个名为BillCategory的类,可用于添加自定义类别。同样,不确定这是否是使用界面的正确方法。

所以我以这种方式使用这个界面:

package com.budgeter;

public class Bills implements Category {

private Double amount;
private Double totalBills;

public Bills() {}
public Bills(double amount) {
    setTotal(amount);
}

private void setTotal(Double amount) {
    this.amount = amount;
    totalBills = amount;
}

public Double getTotal() {
    return totalBills;
}
@Override
public void setPersonalLoan(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setDonationsGifts(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setRecreation(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setHouseHoldItems(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setUtilities(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setSavings(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setGroceries(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setAutoInsurance(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setAutoPayment(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setHomeInsurance(int budget) {
    // TODO Auto-generated method stub

}
@Override
public void setHomePayment(int budget) {
    // TODO Auto-generated method stub

}
}

这是我BillCategory用来添加新类别的类,但不完全确定如何将其与我的界面相关联:

package com.budgeter;

import java.util.HashMap;
import java.util.Map;

public class BillCategory {

private static Map<String, Integer> categories = new HashMap<String, Integer>();

public void addCategory(String categoryName, int frequency) {
    categories.put(categoryName, frequency);
}

public Map<String, Integer> getCategories() {
    return categories;
}

}
  • 检查项目是否已设置然后为我的getTotal()方法计算所有项目的最有效方法是什么?
  • 我是否正确使用了界面?
  • 我是否使用了良好的命名约定(例如类别)?
  • setTotalAmount()我不确定是否应该传递引用amount或设置amountusingthis.amount = amount然后全局访问它的方法。对此有最佳做法吗?
  • 将我的BillCategory课程与界面联系起来的最佳方式是什么?
4

1 回答 1

2

(public, private, protected)对于您的界面,我唯一建议的就是为您的方法声明添加某种可见性。您在实现中拥有它,但在界面中却没有。实现中的代码看起来不错,只是两个变量似乎在做同样的事情。我不知道我是否完全理解你为什么称它为 Category 但在 java 中使用大写的接口名称是很好的约定。

在 set 方法中,您可以完全按照自己的方式进行操作this.amount = amount,从构造函数中调用该方法是一种很好的做法。

关于您的第一个问题,如果您为每个 set 方法添加一个类变量并将该变量设置为传入的值,那么您可以将getTotal()方法中的总数相加并返回该值。

private int personalLoan;
private int donationGifts;
private int recreation;
private int houseHoldItems;
...

@Override
public void setPersonalLoan(int budget) {
    this.personalLoan = budget;
}
@Override
public void setDonationsGifts(int budget) {
    this.donationGifts = budget;
}
@Override
public void setRecreation(int budget) {
    this.recreation = budget;
}
@Override
public void setHouseHoldItems(int budget) {
    this.houseHoldItems = budget;
}
...


public double getTotal() {
    double total = personalLoan + donationGifts + recreation + houseHoldItems + utilities + savings + groceries....
    return total;
}

您还可以将所有这些变量作为构造函数中的参数,并使用这些方法设置它们,而不是为您的总数取一个值。

请注意,我确实发现您有预算,int's因此您的预算不能有十进制值。您可能想在界面中更改它,然后返回一个双精度值getTotal()更有意义。

于 2013-06-19T02:09:41.797 回答