java - 不能将 Guava Optional 用作默认构造函数?

标签 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;
}

报错是:

/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 在这里真的合适吗?)

关于java - 不能将 Guava Optional 用作默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044694/

相关文章:

java - 在 API 9 以下使用 Arrays.copyOfRange()

java - 如何将另一个包的类导入到我的包中

java - 在 Hibernate/JPA 中可选地使用级联

java - 为什么构建失败并显示 JRadioButton[] 数组中的空值

java - 有没有办法在运行时获取正在使用的 Guava 版本?

java - 使用音轨 android studio 改变音调

java - 如何持久化 Guava AtomicLongMap ?

java - 如何使用谷歌集合将 Map<String,String> 转换为 List<String>

java - 有没有一种优雅的方法可以在使用 Guava 转换 Collection 时删除空值?

java - google的ImmutableList和Collections.unmodifyingList()有什么区别?