对于默认构造函数,不能使用Guava Optional吗?

fis*_*rds 1 java guava

我无法找到一个正确的方法来获得一个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;
}
Run Code Online (Sandbox Code Playgroud)

报告的错误是:

/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());
Run Code Online (Sandbox Code Playgroud)

Lou*_*man 5

Java无法从您编写的代码中自动推断出泛型.相反,使用

public ShoppingCart() {
  this(Optional.<DiscountCoupon>absent());
}
Run Code Online (Sandbox Code Playgroud)

(虽然我不得不问 - 你确定这Optional在这里真的合适吗?)