小编goo*_*le2的帖子

Java:可以列出实现更多接口的保持类

我是NetworkExecutor用Java 写的.我也需要我的Runnable课程来实现Serializable,以便能够通过网络发送它.我想像我这样制作自己的界面NetworkRunnable:

public interface NetworkRunnable extends Runnable, Serializable{}
Run Code Online (Sandbox Code Playgroud)

但是所有类都需要实现NetworkRunnable,虽然这个接口是空的,只是统一RunnableSerializable接口.我想允许类实现RunnableSerializable使用.我发现编写泛型函数是可能的:

public <T extends Runnable & Serializable> void execute(T command)
Run Code Online (Sandbox Code Playgroud)

这允许使用类实现公正RunnableSerializable,但我不能写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,但对我来说它看起来像一个丑陋的解决方案.

有没有办法一次编写实现多个接口的类列表?或者我可以以某种方式指定,所有类实现RunnableSeriablizable实现NetworkRunnable接口呢?

编辑:

对不起,我可能没有详细说明我的问题.我想做的事情如下:

public class …
Run Code Online (Sandbox Code Playgroud)

java generics

9
推荐指数
1
解决办法
198
查看次数

Rust 函数指针似乎被借用检查器视为有状态

以下示例代码无法编译:

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)

closures lifetime rust borrow-checker mutable-reference

4
推荐指数
1
解决办法
84
查看次数