gpt4 book ai didi

java - Java 是否支持类似 Swift 的类扩展?

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:30 25 4
gpt4 key购买 nike

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

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

最佳答案

不,普通 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 语言,如果这在您的项目中没问题的话。例如,Kotlin附带 extension methods functionality ,以及标准库中已经定义的一些有用的扩展。这是一个 Kotlin and Lombok comparison .

关于java - Java 是否支持类似 Swift 的类扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38866637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com