有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java传递是可选的。简洁地将()值指定给方法

使用Guava的Optional类型作为方法参数的一个问题是,您不能简单地编写

// method declaration
public void foo(Optional<String> arg);

// compiler error
foo(Optional.absent());

由于类型推断失败,但必须显式添加类型:

// real method call
foo(Optional.<String> absent());

我怎样才能避免呢


共 (3) 个答案

  1. # 1 楼答案

    就在写问题的时候,我想到了

    public class GuavaConstants {
        @SuppressWarnings( { "raw" })
        public static final Optional ABSENT = Optional.absent();
    
        // similar for empty ImmutableList, etc.
    }
    

    然后这个电话看起来就像

    @SuppressWarnings( { "unchecked" })
    foo(GuavaConstants.ABSENT);
    

    有更好的方法吗

  2. # 2 楼答案

    所以,这是正确的方法。如果不是为了别的什么,至少让我在这里展示一下,作为我自己将来的参考,给像我这样不看问题的人看:)感谢科林(和阿列克谢)

    foo(Optional.<String>absent())
    
  3. # 3 楼答案

    如果您处理的是一小部分Optional<>类型(例如,大部分是字符串或少数其他类型),只需创建一些帮助器方法来为您绑定类型参数:

    public final class AbsentValues {
        public static Optional<String> absentString() {
            return Optional.<String>absent();
        }
    }
    

    您甚至可以静态导入这些代码,以生成更清晰的代码:

    import static AbsentValues.*;
    
    ...
    
    foo(absentString());
    

    对于不太常见的Optional<>类型,只需显式指定类型参数。它可能不漂亮,但它是正确的