java - 如何向 Google 的 Guice Provider 提供参数?
问题描述
让我们假设 UI 应该通过 2 或 4,具体取决于用户做出的选择。后端使用 Guice 的 Provider 来实例化有效的类。但是' get '本身不接受任何参数,但是我想做一些类似下面的相同代码的事情。如何做到这一点?
public class VehicleProvider implements Provider<Vehicle> {
public Vehicles get(int numberOfTyres) {
/**
* numberTyres == 2
* return new TwoWheelVehicles
* numberTyres == 4
* return new FourWheelVehicles
*/
}
}
解决方案
要做最类似于“将参数传递给提供者”的事情,您可以定义一个工厂类,例如:
class VehicleFactory {
Vehicle build(int numWheels) {
return new Vehicle(numWheels);
}
}
然后将该工厂注入到需要创建Vehicle
.
您可以考虑使用辅助注入来定义工厂的绑定;每当我使用辅助注射时,它都会让我很困惑,因此您可能需要先考虑更简单的解决方案。
如果您实际上只需要创建 2 轮或 4 轮车辆(而不是其他任意数量),您可以为您的工厂提供特定方法:
class VehicleFactory {
Vehicle buildTwoWheeled() {
return new Vehicle(2);
}
Vehicle buildFourWheeled() {
return new Vehicle(4);
}
}
或者您可以绑定提供者的单独实例:
public class TwoWheelVehicleProvider implements Provider<Vehicle> { ... }
public class FourWheelVehicleProvider implements Provider<Vehicle> { ... }
或者,定义绑定注释:
@Provides @TwoWheeled
Vehicle provideTwoWheeledVehicle() { return new Vehicle(2); }
@Provides @FourWheeled
Vehicle provideFourWheeledVehicle() { return new Vehicle(4); }
推荐阅读
- javascript - 如何仅使用 javascript 获取特定 div/form 的所有子输入?
- regex - html模式电话号码可选扩展
- swift - macOS 上的 AudioKit:获取/设置系统设备音量
- php - 我没有得到正确的随机值。我的数据库中有 6 个值。我给限制 3。但前 4 项显示随机
- matlab - 如何使用变量索引和更改矩阵中的值?
- javascript - 在阴影根中修改自定义元素的样式
- java - Java Object 和 toString() 属性并创建 2 个不同的结果
- python - 如何使用多个条件过滤 Pandas DataFrame?
- asp.net - 抛出“操作超时”之类的异常
- arrays - 如何制作30个不同的唯一随机数数组?