我是NetworkExecutor用Java 写的.我也需要我的Runnable课程来实现Serializable,以便能够通过网络发送它.我想像我这样制作自己的界面NetworkRunnable:
public interface NetworkRunnable extends Runnable, Serializable{}
Run Code Online (Sandbox Code Playgroud)
但是所有类都需要实现NetworkRunnable,虽然这个接口是空的,只是统一Runnable和Serializable接口.我想允许类实现Runnable和Serializable使用.我发现编写泛型函数是可能的:
public <T extends Runnable & Serializable> void execute(T command)
Run Code Online (Sandbox Code Playgroud)
这允许使用类实现公正Runnable和Serializable,但我不能写List拿着这些对象.我尝试过类似的东西:
List<? extends Runnable & Serializable> list=new LinkedList<>();
List<Runnable & Serializable> list=new LinkedList<>();
Run Code Online (Sandbox Code Playgroud)
但它不起作用.作为一个解决方案,我可以编写List<Runnable>并使用它,因为函数<T extends Runnable & Serializable> void execute(T command)也会接受只是Runnable实现Serializable,但对我来说它看起来像一个丑陋的解决方案.
有没有办法一次编写实现多个接口的类列表?或者我可以以某种方式指定,所有类实现Runnable和Seriablizable实现NetworkRunnable接口呢?
编辑:
对不起,我可能没有详细说明我的问题.我想做的事情如下:
public class …Run Code Online (Sandbox Code Playgroud) 以下示例代码无法编译:
fn invoke(i: i32, mut f: impl FnMut(i32)) {
f(i)
}
fn main() {
let f: fn(i32, _) = invoke;
let mut sum: i32 = 0;
for i in 0..10 {
_ = f(i, |x| sum += x);
}
println!("{:?}", sum);
}
Run Code Online (Sandbox Code Playgroud)
编译器返回以下错误:
Compiling playground v0.0.1 (/playground)
error[E0499]: cannot borrow `sum` as mutable more than once at a time
--> src/main.rs:10:18
|
10 | _ = f(i, |x| sum += x);
| - ^^^ --- borrows occur due to use …Run Code Online (Sandbox Code Playgroud)