1

Guavaオプションであるデフォルトのコンストラクター引数を持つ適切な方法を理解できません。次のコードはJava1.6ではコンパイルされません

public class ShoppingCart implements Serializable {
private final Optional<DiscountCoupon> discountCoupon;

public ShoppingCart() {
    this(Optional.absent());
}
public ShoppingCart(Optional<DiscountCoupon> dc) {
    Preconditions.checkNotNull(dc);
    if (dc.isPresent()) {
        Preconditions.checkArgument(dc.get().getPennyDiscount() != 0 || 
                        dc.get().getPercentDiscount() != 0);
    }
    discountCoupon = dc;
}

報告されたエラーは次のとおりです。

/Users/pfarrell/sandbox//com/wayfinderdigital/struct/ShoppingCart.java:29: cannot find symbol
symbol  : constructor ShoppingCart(com.google.common.base.Optional<java.lang.Object>)
location: class com.wayfinderdigital.struct.ShoppingCart
    this(Optional.absent());
4

2 に答える 2

5

Javaは、作成したコードからジェネリックを自動的に推測することはできません。代わりに、

public ShoppingCart() {
  this(Optional.<DiscountCoupon>absent());
}

(私は尋ねなければなりませんが、それOptionalがここで本当に適切であると確信していますか?)

于 2012-08-20T20:34:44.567 に答える
3

変更してみてください

this(Optional.absent());

this(Optional.<DiscountCoupon>absent());

2つ目は、明示的な型パラメーター指定を使用するため、型パラメーターの推論は必要ありません。タイプパラメータの推論は、入力パラメータまたは式が割り当てられているタイプに基づいて実行できますが、他の多くの使用サイトの推論は自動的に機能しないため、タイプパラメータは下限を想定しています。

于 2012-08-20T20:35:11.657 に答える