我有一个包含许多类的枚举,这些类目前是使用newInstance()
对象上的Class
方法创建的。我想在这里开始使用依赖注入。
用原来的匕首我可以说ObjectGraph#get(item.getClazz())
。有没有办法实现与Dagger2类似的东西? (我真的很喜欢dagger2接口,不想再回到dagger1)。
答案 0 :(得分:2)
Dagger 2没有任何通过Class
对象获取实例的内置机制。
鉴于你的示例代码,我猜你的枚举看起来像是:
enum Item {
ONE(A.class),
TWO(B.class);
private final Class<?> clazz;
private Item(Class<?> clazz) { this.clazz = clazz; }
Class<?> getClazz() { return clazz; }
}
为了获得与您使用ObjectGraph
建议的版本类似的调用代码,您需要@Component
为Item
引用的每种类型提供方法。
@Component
interface MyComponent {
A getA();
B getB();
}
现在,您可以将Item
更新为委托给MyComponent,而不再需要类文字。
enum Item {
ONE {
@Override A getObject(MyComponent component) {
return component.getA();
}
},
TWO {
@Override B getObject(MyComponent component) {
return component.getB();
}
};
abstract Object getObject(MyComponent component);
}
现在,您可以拨打ObjectGraph#get(item.getClazz())
而不是item.getObject(myComponent)
,而不是#include <iostream>
#include <cstdio>
using namespace std;
int val1;
int val2;
int val3;
int sortArray[3];
int main(){
printf("Enter three integer values.\n");
printf("Please enter integer 1: ");
cin >> val1;
printf("Please enter integer 2: ");
cin >> val2;
printf("Please enter integer 3: ");
cin >> val3;
//Checks val1 status
if (val1 > val2, val3) {
sortArray[1] = val1;
}
if (val1 > val2, val1 < val3){
sortArray[1] = val3;
sortArray[2] = val1;
sortArray[3] = val2;
}
if (val1 > val3, val1 < val2){
sortArray[1] = val2;
sortArray[2] = val1;
sortArray[3] = val3;
}
//checks val2 status
if (val2 > val1, val3){
sortArray[1] = val2;
}
if (val2 > val1, val2 < val3){
sortArray[1] = val3;
sortArray[2] = val2;
sortArray[3] = val1;
}
if (val2 > val3, val2 < val1){
sortArray[1] = val1;
sortArray[2] = val2;
sortArray[3] = val3;
}
//checks val3 status
if (val3 > val1, val2){
sortArray[1] = val3;
}
if (val3 > val1, val3 < val2){
sortArray[1] = val2;
sortArray[2] = val3;
sortArray[3] = val1;
}
if (val3 > val2, val3 < val1){
sortArray[1] = val1;
sortArray[2] = val3;
sortArray[3] = val2;
}
printf("Values sorted are: %d, %d, %d", sortArray[1], sortArray[2], sortArray[3]);
}
。