Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android实现类似Java的工厂设计模式_Android_Dagger 2_Dagger Hilt - Fatal编程技术网

Android实现类似Java的工厂设计模式

Android实现类似Java的工厂设计模式,android,dagger-2,dagger-hilt,Android,Dagger 2,Dagger Hilt,如何使用java示例代码使用Android和Hilt/Dagger创建工厂方法。这种设计模式在Android Hilt/Dagger中是否可行,以及如何实现。我在网上找不到好的解决办法 谢谢你,约翰 public class ScannerFactory { private ScannerFactory() { } /** * Get the scanner device * * @param scannerType - The scan

如何使用java示例代码使用Android和Hilt/Dagger创建工厂方法。这种设计模式在Android Hilt/Dagger中是否可行,以及如何实现。我在网上找不到好的解决办法

谢谢你,约翰

public class ScannerFactory {

    private ScannerFactory() {
    }

    /**
     * Get the scanner device
     *
     * @param scannerType - The scanner type, one of A or B
     * @param context     - The apps context
     * @return
     */
    public static ScannerDevice getScannerDevice(final String scannerType, final Context context) {
        if (scannerType.equals("A")) {
            return new DeviceA(context);
        } else if (scannerType.equals("B")) {
            return new DeviceB(context);
        }
        throw new IllegalArgumentException("Wrong device");
    }
}

从javadoc判断,您需要的是
应用程序
上下文
(而不是
活动
上下文)。所以你应该这样做:

@Singleton
公营扫描工厂{
私人最终语境;
@注入
公共扫描工厂(@ApplicationContext上下文){
this.context=上下文;
}
/**
*获取扫描设备
*
*@param scannerType-扫描仪类型,A或B之一
*@返回
*/
公共静态扫描设备getScannerDevice(最终字符串扫描类型){
if(扫描类型等于(“A”)){
返回新设备(上下文);
}else if(扫描类型等于(“B”)){
返回新设备B(上下文);
}
抛出新的IllegalArgumentException(“错误设备”);
}
}
然后当你想用它的时候,你就按照。例如:

@AndroidEntryPoint
公共类MainActivity扩展了AppCompatActivity{
@注入
扫描工厂扫描工厂;
//…活动代码的其余部分
}