如何在Java 8的UnaryOperator中使用引用方法?

3

目前,我有一个像这样的 UnaryOperator

UnaryOperator<Object> defaultParser = obj -> obj;

我不知道是否可以在这类操作中使用方法引用。例如:

UnaryOperator<String> defaultParser = String::toString;

但是使用通用的方式,而不仅仅是String类型。


Object::toString吗?由于toString是在对象上定义的,因该是你在“通用方式”中寻找的东西。 - Silvio Mayolo
@SilvioMayolo 但是一元运算符可能接收一个对象,而不仅仅是字符串,我想要那个对象返回。 - Dang Nguyen
String::toString is not the same as obj -> obj, as the former will throw a NullPointerException for null input whereas the latter won’t. If that’s not a concern or even intended behavior, you can simply use UnaryOperator<WhatEver> defaultParser = Objects::requireNonNull; - Holger
2个回答

4

如果你只想避免lambda表达式,UnaryOperator有一个静态的identity()方法:

UnaryOperator<Object> defaultParser = UnaryOperator.identity();

如果你特别想要一个方法引用(为什么?),你可以在你的类中定义一个方法。
public static <T> T identity(T t) {
    return t;
}

那么您就可以将其用作方法引用:

UnaryOperator<Object> defaultParser = MyClass::identity;

2

是的,您可以使用UnaryOperator.identity(),如下所示:

UnaryOperator<Object> defaultParser = UnaryOperator.identity();

这个函数是通过lambda表达式定义的:

static <T> UnaryOperator<T> identity() {
    return t -> t;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接