3

android 资源ID通常用作获取/修改 XML 定义的布局组件的一种方式。将它们纯粹用作 Android 应用程序中任何 Java 代码的唯一标识符是否可以接受?例如:

使用 Android 资源 ID

ids.xml

<item name="sensor_pressure" type="id"/>
<item name="sensor_humidity" type="id"/>
<item name="sensor_precision_gas" type="id"/>

传感器.java

public Sensor(int sensorId) {
    initializeSensor(sensorId);
}

private void determineSensorType(int sensorId) {
    switch(sensorId) {
    case R.id.sensor_pressure:
        intializePressureSensor();
        break;
    case R.id.sensor_humidity:
        initializeHumiditySensor();
        break;
    // etc...
    }
}

还是最好用纯 Java 做事?例如:

仅使用 Java

传感器.java

public Sensor(int sensorId) {
    initializeSensor(sensorId);
}

enum SensorType {
    PRESSURE, HUMIDITY, PRECISION_GAS
}

private void determineSensorType(SensorType sensorType) {
    switch(sensorType) {
    case SensorType.PRESSURE:
        intializePressureSensor();
        break;
    // etc...
    }
}

我的示例的最佳解决方案:

来自下面的 MaciejGórski。使用一个接口,可以解决完全不需要唯一 ID 所带来的问题。

public interface Sensor {

}

public class HumiditySensor implements Sensor {

    public HumiditySensor() {
        init();
    }
}
4

3 回答 3

2

面向对象的方式怎么样?

public interface Sensor {

}

public class HumiditySensor implements Sensor {

    public HumiditySensor() {
        init();
    }
}

您可以避免在代码中的许多地方出现难看的 switch 语句。

于 2013-06-04T20:24:57.233 回答
1

将它们纯粹用作 Android 应用程序中任何 Java 代码的唯一标识符是否可以接受?

它确实有效,但是...

还是最好用纯 Java 做事?

我会采用这种方法。如果不出意外,这会enum阻止您将标识符与其他整数混淆。

于 2013-06-04T17:46:12.100 回答
0

这当然是可行的,但我想不出将某种 contants/ids 放在资源文件中的单一好处。使用枚举允许您对相关常量进行分组,并帮助您避免意外混合不相关的常量。

于 2013-06-04T17:48:39.963 回答