我有以下 lambda 表达式:
public mylambdafunction(){
Optional<MyClass> optional = Arrays.stream(myClassesValues).filter(x ->
new String(x.bytesArray,"UTF-16LE").equalsIgnoreCase(comparationString)).findFirst();
}
好吧,new String(x.bytesArray,"UTF-16LE")
方法引发异常 UnsupportedEncodingException
。
我想对主函数 mylambdafunction()
抛出异常,例如:
public mylambdafunction() throws UnsupportedEncodingException{
....
}
这可能吗?
最佳答案
由于您使用的是众所周知的字符集,因此可能修改功能接口(interface)方法的替代方法是使用 the overloaded String
constructor which accepts a byte[]
and a Charset
, 但不会抛出 UnsupportedEncodingException
。
使用StandardCharsets.UTF_16LE
作为 Charset
参数。
Stream#filter(Predicate)
期待一个 Predicate
它提供了一个 test(Object)
方法。由于此方法未声明作为 UnsupportedEncodingException
父类(super class)型的已检查异常(并且由于 UnsupportedEncodingException
本身已被检查),因此主体抛出此类异常的任何 lambda 表达式都将被不相容。同样,对声明此类异常的方法的任何方法引用也将是不兼容的。
关于Java8 lambda 谓词异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27508869/