1

我想不出正确的方法来拥有一个 Guava Optional 的默认构造函数参数。以下代码无法使用 Java 1.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());

第二种使用显式类型参数规范,因此不需要类型参数推断。类型参数推断可以基于输入参数或基于表达式被分配到的类型来完成,但许多其他使用站点推断不会自动工作,因此类型参数假定其下限。

于 2012-08-20T20:35:11.657 回答