我在Java中有以下方法:
public void myMethod(
@ClosureParams(
value = SimpleType.class,
options = {
"java.util.Map"
}
) Closure<String> closure
) {
...
}
Run Code Online (Sandbox Code Playgroud)
它必须@ClosureParams为 IDEA 中的静态类型检查器和类型推断指定闭包的参数类型。
在 Groovy 脚本中,我按如下方式调用此方法:
myMethod { Map<String, Object> doc ->
...
}
Run Code Online (Sandbox Code Playgroud)
而且效果很好。但是当我尝试在 java 方法中指定闭包的泛型类型时:java.util.Map
public void myMethod(
@ClosureParams(
value = SimpleType.class,
options = {
"java.util.Map<java.lang.String,java.lang.Object>" // <-- added here
}
) Closure<String> closure
) {
...
}
Run Code Online (Sandbox Code Playgroud)
groovy 的静态类型检查器失败并出现错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
C:\myproject\script.groovy: 1: Expected parameter of type java.util.Map<java.lang.String,java.lang.Object> but got java.util.Map <String, …Run Code Online (Sandbox Code Playgroud) 我将图像和其他数据写入二进制文件。当我通过 ImageIO.read(InputStream) 从该文件读取图像时,它读取图像,没问题,但方法关闭给定的输入流,我无法继续读取其他数据。
编辑:这是将图像和字符串写入文件后的简单代码:
File f = new File("test.bin");
if(f.exists())
f.delete();
f.createNewFile();
DataOutputStream os = new DataOutputStream(new FileOutputStream(f));
BufferedImage img = ImageIO.read(new File("test.jpg"));
ImageIO.write(img, "jpg", os);
os.writeUTF("test string after image");
os.close();
Run Code Online (Sandbox Code Playgroud)
以及读取所有内容的代码:
DataInputStream is = new DataInputStream(new FileInputStream(f));
BufferedImage img = ImageIO.read(is);
String s = is.readUTF(); // on this line EOFException occurs
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
NetBeans 输出:
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
at java.io.DataInputStream.readUTF(DataInputStream.java:589)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at mediamanager.Main.test(Main.java:105)
at mediamanager.Main.main(Main.java:44)
Run Code Online (Sandbox Code Playgroud)
可能是我做错了什么?