1

ArrayListをBigDecimalで並べ替えようとしていて、ブリックウォールにぶつかっています。私はこのように少し見えるクラスを持っています:

public class deal implements Comparable<deal>{

protected BigDecimal bdPrice;
protected int iQuantity;
protected String sDealType;
protected UUID dealUniqueID;
protected int dealID;
protected BigDecimal bdUnitPrice;

public deal(){
    bdPrice         = new BigDecimal("0");
    bdUnitPrice     = new BigDecimal("0");
    iQuantity       = 1;
    sDealType       = "Single item";
    dealUniqueID    = UUID.randomUUID();
    dealID          = 0;
}

private void setUnitPrice(){
    this.bdUnitPrice = this.bdPrice.divide(new BigDecimal(this.iQuantity));
}

public BigDecimal compareTo(deal oDeal) {
    // TODO Auto-generated method stub
    return bdUnitPrice.compareTo(oDeal.getUnitPrice());
}

public boolean equals(deal oDeal) {
    if (!(oDeal instanceof deal))
        return false;
    deal oD = (deal) oDeal;

    return this.bdUnitPrice.equals(oD.bdUnitPrice);
}
}

私のメインのAndroidアクティビティは次のようになります。

public class SupermarketDealsActivity extends Activity {
private ArrayAdapter<deal> itemAdapter;
private ListView lvDeals;
private ArrayList<deal> itemArray;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    SetUpView();
}

private void SetUpView(){
lvDeals                     = (ListView)this.findViewById(R.id.listDeals);

    itemArray                   = new ArrayList<deal>();
    itemArray.clear();

    itemAdapter                 = new ArrayAdapter<deal>(this, android.R.layout.simple_list_item_1,itemArray);
    lvDeals.setAdapter(itemAdapter);
}

private void CreateADeal(int iQuantity, BigDecimal bdPrice) {
    deal oDeal                  = new deal();

    oDeal.setQuantity(iQuantity);
    oDeal.setPrice(bdPrice);

    CreateListDeals(oDeal);
}

private void CreateListDeals(deal oDeal){
    itemArray.add(oDeal);
    Collections.sort(itemArray,Collections.reverseOrder());
    itemAdapter.notifyDataSetChanged();
}
}

私のJavaクラスでは、compareToメソッドで次のようなエラーが発生します。

タイプの不一致:intからBigDecimalに変換できません

私は途中で何かを逃したに違いありません、それは何ですか?

乾杯

4

1 に答える 1

4
public BigDecimal compareTo(deal oDeal) {
    // TODO Auto-generated method stub
    return bdUnitPrice.compareTo(oDeal.getUnitPrice());
}

インターフェイスのシグニチャとも一致せず、のリターンタイプとも一致しませんbdUnitPrice.compareTo。次のように変更します。

public int compareTo(deal oDeal) {
    // TODO Auto-generated method stub
    return bdUnitPrice.compareTo(oDeal.getUnitPrice());
}

私が言及しなければならない他のいくつかのこと(コメントから):

  1. クラスの名前は大文字で始める必要があります。それとあなたがしなければならない他のことを詳しく説明している「コード規約」文書があります。
  2. オーバーライドします-オーバーライドしない限り、equalsオーバーライドしないでください-そうしないと、このクラスのオブジェクトをHashSet、HashMap、またはハッシュを使用する他のコレクションに配置すると、多くの問題が発生します。equalshashCode
于 2012-06-29T00:11:32.300 に答える