在Swift中,您可以创建现有类的扩展,以在需要时向现有类添加其他功能。这也有助于避免创建现有类的子类。

我只是想知道Java中是否存在类似的功能?还是向现有Java类添加其他方法的唯一方法是创建现有类的子类?

最佳答案

不, Vanilla Java不具有扩展方法。但是,由于其注释和字节码生成,Lombok添加了许多有用的功能-包括扩展方法语法。

您可以使用其@ExtensionMethod批注将现有的静态方法“转换”为扩展方法。静态方法的第一个参数基本上变为this。例如,这是有效的Lombok增强Java代码:

import lombok.experimental.ExtensionMethod;

@ExtensionMethod({java.util.Arrays.class, Extensions.class})
public class ExtensionMethodExample {
  public String test() {
    int[] intArray = {5, 3, 8, 2};
    intArray.sort();

    String iAmNull = null;
    return iAmNull.or("hELlO, WORlD!".toTitleCase());
  }
}

class Extensions {
  public static <T> T or(T obj, T ifNull) {
    return obj != null ? obj : ifNull;
  }

  public static String toTitleCase(String in) {
    if (in.isEmpty()) return in;
    return "" + Character.toTitleCase(in.charAt(0)) +
        in.substring(1).toLowerCase();
  }
}

请注意,可以对空对象“调用” Lombok扩展方法-只要静态方法是空安全的,就不会抛出NullPointerException,因为它基本上被转换为静态方法调用。是的-它归结为语法糖,但是我想这比通常的静态方法调用更具可读性。

除此之外,如果您的项目可以,那么您可以使用其他具有Java互操作性的JVM语言。例如,Kotlinextension methods functionality一起提供,还有一些已经在标准库中定义的有用扩展。这是Kotlin and Lombok comparison

09-11 02:26
查看更多