- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想制作一组实现接口(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/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!