繁体   English   中英

无法将Guava Optional用于默认构造函数吗?

[英]Can't use Guava Optional for default constructor?

我无法弄清楚具有默认构造函数参数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());

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

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

(尽管我不得不问-您确定Optional在这里真的合适吗?)

尝试改变

this(Optional.absent());

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

第二种使用显式类型参数规范,因此不需要类型参数推断。 可以根据输入参数或根据分配了表达式的类型来完成类型参数推断,但是许多其他使用地点推断不会自动起作用,因此类型参数采用其下限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM