小编Mat*_*son的帖子

Guice子模块阻止继承绑定

我想在不引入注释或使用字符串键名的情况下完成以下操作,是否可以使用Guice?此外,引入第三个私有模块MyService及其ExecutorService绑定并不理想,因为我希望ExecutorService成为整个应用程序的单例,不仅可以注入,还可以注入MyService其他类,MyOtherService例如.

public class Main {
  public static void main(String[] args) {
    final Injector injector = Guice.createInjector(new MyAppModule());
    final MyService service = injector.getInstance(MyService.class);
    service.printInternals();
    // Ideally this would print something like:
    // My Executor: ExecutorImplClass@1
    // Red Executor: ExecutorImplClass@2
    // Blue Executor: ExecutorImplClass@3
  }
}

public class MyAppModule extends PrivateModule {
  @Override
  protected void configure() {
    install(new RedModule());
    install(new BlueModule());
    bind(ExecutorService.class).toInstance(Executors.newSingleThreadExecutor());
    bind(MyService.class).to(MyServiceImpl.class);
    expose(MyService.class);
  }
}

public class BlueModule extends PrivateModule { …
Run Code Online (Sandbox Code Playgroud)

java inheritance overriding module guice

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

Java 7 walkFileTree在目录上调用visitFile

说我有以下目录结构

/root/dir
/root/dir/file1.txt
/root/dir/subdir
/root/dir/subdir/file2.txt
Run Code Online (Sandbox Code Playgroud)

假设我将使用以下访客:

class MyFileVisitor extends SimpleFileVisitor<Path> {

  @Override
  public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs)
  throws IOException {
    if(Files.isDirectory(file)) {
      throw new IllegalStateException("WAT!? Visiting directory: "+file.toAbsolutePath().toString());
    }
    System.out.println("Visiting file: "+file.toAbsolutePath().toString());
    return super.visitFile(file, attrs);
  }
Run Code Online (Sandbox Code Playgroud)

如果我们使用walkFileTree的简单重载:

Files.walkFileTree(Paths.get("/root/dir"), new MyFileVisitor());  
Run Code Online (Sandbox Code Playgroud)

一切都按计划进行,我们看到以下输出:

Visiting file: /root/dir/file1.txt
Visiting file: /root/dir/subdir/file2.txt
Run Code Online (Sandbox Code Playgroud)

但是,当我们尝试设置最大深度时,事情开始崩溃:

Files.walkFileTree(Paths.get("/root/dir"), EnumSet.noneOf(FileVisitOption.class), 1, new MyFileVisitor());
Run Code Online (Sandbox Code Playgroud)

输出:

Visiting file: /root/dir/file1.txt

java.lang.IllegalStateException: WAT!? Visting directory: /root/dir/subdir
Run Code Online (Sandbox Code Playgroud)

我很确定这是一个错误,但是我想先问一下社区:我缺少什么了吗,这实际上是预期的行为吗?感谢您的确认!

细节:

java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) …
Run Code Online (Sandbox Code Playgroud)

java-7 nio2

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

标签 统计

guice ×1

inheritance ×1

java ×1

java-7 ×1

module ×1

nio2 ×1

overriding ×1