相关疑难解决方法(0)

用Guice注入泛型

我正在尝试迁移一个小项目,用Guice替换一些工厂(这是我的第一个Guice试验).但是,在尝试注射仿制药时,我陷入困境.我设法提取了一个带有两个类和一个模块的小玩具示例:

import com.google.inject.Inject;

public class Console<T> {
  private final StringOutput<T> out;
  @Inject
  public Console(StringOutput<T> out) {
    this.out = out;
  }
  public void print(T t) {
    System.out.println(out.converter(t));
  }
}

public class StringOutput<T> {
  public String converter(T t) {
    return t.toString();
  }
}

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.TypeLiteral;


public class MyModule extends AbstractModule {

  @Override
  protected void configure() {
    bind(StringOutput.class);
    bind(Console.class);
  }

  public static void main(String[] args) {
    Injector injector = Guice.createInjector( new MyModule() );
    StringOutput<Integer> out = injector.getInstance(StringOutput.class); …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection guice

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

在Guice注入一家通用工厂

以下代码是生成Bar<T>给定a 的工厂示例Foo<T>.工厂并不关心什么T是:对于任何类型T,它都可以制造Bar<T>一个Foo<T>.

import com.google.inject.*;
import com.google.inject.assistedinject.*;

class Foo<T> {
  public void flip(T x) { System.out.println("flip: " + x); }
}

interface Bar<T> {
  void flipflop(T x);
}

class BarImpl<T> implements Bar<T> {
  Foo<T> foo;

  @Inject
  BarImpl(Foo<T> foo) { this.foo = foo; }

  public void flipflop(T x) { foo.flip(x); System.out.println("flop: " + x); }
}

interface BarFactory {
  <T> Bar<T> create(Foo<T> f);
}

class Module extends AbstractModule {
  public …
Run Code Online (Sandbox Code Playgroud)

java generics dependency-injection guice

12
推荐指数
1
解决办法
4848
查看次数

如何在Guice中获取动态类型/动态构建的ParameterizedType的实例

给定一个注入器,我想知道如何检索某些参数化类型的特定实例(但我没有Type它自己).让我解释一下自己:

想象一下,您已经进行了以下绑定:

  • List<Apple> 势必 ArrayList<Apple>
  • Set<Pears> 势必 HashSet<Pear>
  • 等......对于其他CollectionFruit.

现在我有一个Fruit fruit实例,我想检索适当的Collection实例.我怎样才能做到这一点?

这是一个小的工作片段,用代码说明我的所有解释:

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;

public class TestGuiceDynamicType {
    public static interface Fruit {

    }

    public static class Apple implements Fruit {

    }

    public static class Pear implements Fruit {

    }

    public static class FruitModule extends AbstractModule {
        @Override
        protected void configure() {
            bind(new TypeLiteral<Collection<Apple>>() {

            }).to(new …
Run Code Online (Sandbox Code Playgroud)

java guice

3
推荐指数
1
解决办法
968
查看次数

标签 统计

guice ×3

java ×3

dependency-injection ×2

generics ×1