小编Sa'*_*'ad的帖子

方法调用中的Java 7 Diamond操作

这是一个关于讨论的后续问题:

为什么菱形运算符不能在Java 7中的addAll()调用中工作?

从Java教程中,

http://docs.oracle.com/javase/tutorial/java/generics/gentypeinference.html

请注意,钻石通常用于方法调用; 但是,为了更加清晰,建议您主要使用钻石来初始化声明它的变量

所以,我对第一行感到有点困惑.当确实在方法调用钻石的工作?

关于钻石操作员如何工作的更多解释可以在这里找到:

http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#What%20is%20type%20argument%20inference%20for%20constructors

从这个,我尝试了以下,这很好:

给我有:

private static class Box<T>{
    public Box(T t){}
}
static void f(Box<Integer> box){}
Run Code Online (Sandbox Code Playgroud)

像下面这样的调用编译好:

f(new Box<>(new Integer(10)));
Run Code Online (Sandbox Code Playgroud)

f()上面的方法调用中调用构造函数的类型参数是从构造函数的参数推断出来的(即Integer).

这就是本教程所说的意思

请注意,钻石通常用于方法调用

如果没有,任何人都可以提供钻石在方法调用中工作的示例吗?

java diamond-operator java-7

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

将参数传递给guice模块是"不好的做法"

检查Guice,我喜欢它.我目前有问题,guice通过注入我需要的所有必需依赖项来解决它.但我想知道我是否以错误的方式使用Guice.我需要的是根据特定实例定义绑定.为了实现这一点,我在模块中传递了实例.

例如,考虑以下内容(有点类似于我的问题):

public class CustomerModule extends AbstractModule { 
   private Customer customer;

   public CustomerModule(Customer customer){
       this.customer = customer;
   }  

   @Override 
   public void configure() {
      bind(ReportGenerator.class).to(HtmlReportGenerator.class);
   }

   @Provides 
   Account providePurchasingAccount() { 
      return customer.getPurchasingAccount();
   }
}
Run Code Online (Sandbox Code Playgroud)

我使用此模块将Account依赖项注入到需要特定客户帐户的报表生成器类中.例如,用户选择特定客户并说,想要显示生成的报告.我有方法

public void printReport (Customer customer){
   Injector injector = Guice.createInjector(new CustomerModule(customer));
   ReportGenerator reportGenerator  = injector.getInstance(ReportGenerator.class);

   showReport(reportGenerator.generate())
}
Run Code Online (Sandbox Code Playgroud)

工作完成后,我完成了这个模块.

这是一个好用的guice吗?

dependency-injection guice

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