gpt4 book ai didi

具有匹配静态接口(interface)的 Java 实用程序单例

转载 作者:行者123 更新时间:2023-11-30 03:00:15 26 4
gpt4 key购买 nike

我想制作一组实现接口(interface)的实用程序类。为了做到这一点,我将使用单例模式。但是,如果能够通过静态方法调用来使用这些实用程序类,那就太好了。例如:

public interface IValidator<T> {
boolean isValid(T value);
}

public class StringValidator implements IValidator<String> {
public static final StringValidator instance = new StringValidator();

@Override
public boolean isValid(final String value) {
return true;
}
}

上面提供了一个单例,它使我能够使用接口(interface)调用实用方法,如下所示:

// Use case #1
IValidator<String> validator1 = StringValidator.instance;
validator1.isValid("");

// Use case #2
StringValidator.instance.isValid("");

但是,我还希望能够通过以下更简洁的方式使用StringValidator:

// Use case #3: How can I also allow this syntax?
StringValidator.isValid("");

Java 中有没有一种方法可以使上述所有三种语法都起作用,而无需重命名方法?我唯一的想法是向静态定义添加一个 varargs 参数,如下所示:

public class StringValidator implements IValidator<String> {
public static final StringValidator instance = new StringValidator();

@Override
public boolean isValid(final String value) {
return StringValidator.isValid(value);
}

public static boolean isValid(final String value, final Object... ignored) {
return true;
}
}

但是,失败并显示消息“无法从 StringValidator 类型对非静态方法 isValid(String) 进行静态引用”。同样,是否有某种方法可以使编译器允许我的所有三种用例语法?谢谢。

最佳答案

如果接口(interface)是函数式接口(interface),您可以删除单例

public class StringValidator {
public static boolean isValid(final String value) {
return ...;
}
}

每当您需要 Validator<String> 的实例时使用静态方法的方法句柄:

IValidator<String> validator1 = StringValidator::isValid; 

关于具有匹配静态接口(interface)的 Java 实用程序单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36189739/

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