java - 使用通用供应商抛出未经检查的异常
问题描述
我有一个方法列表,其中包含Supplier<T>
用于返回不同类型的默认值的参数。但是,在某些情况下,我需要抛出异常(未选中)而不是值。
目前,我必须为每个函数定义传递 lambda,但我想创建供应商实例以引发异常并在所有函数定义中重新使用它。
我有以下代码:
public static void main(String[] args)
{
testInt("Key1", 10, () -> 99);
testInt("Key2", -19, () -> 0);
testInt("Key3", null, () -> {
throw new UnsupportedOperationException(); //repetition
});
testBoolean("Key4", true, () -> Boolean.FALSE);
testBoolean("Key5", null, () -> {
throw new UnsupportedOperationException();//repetition
});
}
static void testInt(String key, Integer value, Supplier<Integer> defaultValue)
{
if (value != null)
System.out.printf("Key : %s, Value : %d" + key, value);
else
System.out.printf("Key : %s, Value : %d" + key, defaultValue.get());
}
static void testBoolean(String key, Boolean value, Supplier<Boolean> defaultValue)
{
if (value != null)
System.out.printf("Key : %s, Value : %d" + key, value);
else
System.out.printf("Key : %s, Value : %d" + key, defaultValue.get());
}
但我想做类似的事情:
final static Supplier<?> NO_VALUE_FOUND = () -> {
throw new UnsupportedOperationException();
};
testInt("Key3", null, NO_VALUE_FOUND);
testBoolean("Key5", null,NO_VALUE_FOUND);
感谢您对此的任何帮助。谢谢。
解决方案
使用一种方法将 NO_VALUE_FOUND 值转换为适当的类型:
static <T> Supplier<T> NO_VALUE_FOUND() {
return (Supplier<T>) NO_VALUE_FOUND;
}
public static void main(String[] args) {
testInt("Key3", null, NO_VALUE_FOUND());
testBoolean("Key5", null,NO_VALUE_FOUND());
}
推荐阅读
- playframework - Flyway 迁移不在游戏框架项目中启动
- groovy - 在 SoapUI 中使用 POI 导入 Excel 文件时出错
- c++ - 无法理解 C++ 代码中 SIGTRAP 的原因
- azure-active-directory - Azure AD 中针对不同环境的应用注册---最佳实践
- oauth-2.0 - Apereo CAS OAuth2:/callbackAuthorize 端点的目的是什么?
- reactjs - React pdf下载空白
- apache-kafka - apache kafka Mirror maker正式发布了吗,我想在我们的prod环境中使用稳定版进行容灾
- python - 在 Numpy 中重新创建 R Quantile Type 2
- c# - 在视图中显示视图模型
- css - 悬停时字体大小变得不稳定