小编Mar*_*tto的帖子

Java - Future.get()多次调用

Future.get()在任务完成后多次调用Java时,Java的行为如何?它会返回相同的结果吗?或者,ExecutionException如果计算失败,会一次又一次地抛出相同的异常吗?我在文档中找不到任何关于它的东西!

java future

22
推荐指数
2
解决办法
6448
查看次数

Java模块系统:“提供”通用接口

我正在尝试Java模块系统。我正在尝试将ServiceLoader用于通用接口。它可以工作,但是我在module-info中收到警告。这是我的最小代码

module testProvideWith {
  provides ServiceGeneric with SString;
  uses ServiceGeneric;
}
public interface ServiceGeneric<T> {
  T getT();
}
public class SString implements ServiceGeneric<String>{
  public String getT() {return "Hello";}
}
Run Code Online (Sandbox Code Playgroud)

尝试时收到警告我并不感到惊讶

ServiceGeneric<String> serv=ServiceLoader.load(ServiceGeneric.class).findFirst().get();
Run Code Online (Sandbox Code Playgroud)

我知道通用擦除,我知道我必须使用注释或其他技巧来注释正确的服务。但是...我没有找到所有通用服务。我希望能够写类似

module testProvideWith {
  provides ServiceGeneric<String> with SString;
  uses ServiceGeneric<String>;
  //more cases could be added
}
...
ServiceLoader.load(ServiceGeneric.class,String.class)
Run Code Online (Sandbox Code Playgroud)

模块和加载程序在哪里协作以跟踪可用的通用版本..但是...什么都没有...没有人考虑过这种可能性...我想念什么吗?

java generics java-module java-12

5
推荐指数
1
解决办法
74
查看次数

SecurityManager 弃用和通过抑制访问检查进行反射

我是一名大学讲师,我正在修改关于 Java 反射的讲座。其他几年,当我讲授抑制访问检查的可怕之处时,我向您展示了您可以设置一个 SecurityManager 并执行类似的操作

    if ("suppressAccessChecks".equals(p.getName())){
      StackTraceElement[] st = Thread.currentThread().getStackTrace();
      if(.. st ..) { throw new SecurityException(); }
    }
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以允许列入白名单的反序列化器仅调用suppressAccessChecks。然而,现在他们正在弃用 SecurityManager。我认为新的模块系统应该在这里有所帮助,但我找不到解释如何支持上面白名单反序列化器的想法的资源。

有什么提示吗?

java-module java-security-manager java-19

2
推荐指数
1
解决办法
158
查看次数