从Android JAR访问全局变量

时间:2014-01-24 18:34:24

标签: java android variables class-library

我有一个Android库项目,几个Android应用程序项目使用它。库jar(具有.class文件)附加到项目并位于lib文件夹中。

1

我正在尝试将变量com.utility.Commons.outgoingSIP(string)设置为jar中的变量。

在Commons.java中声明:public static String outgoingSIP = "";

2

这是一个代码片段:

public void sendMessage(SIPMessage sipMessage, InetAddress receiverAddress, int receiverPort)
        throws IOException {
    long time = System.currentTimeMillis();
    byte[] bytes = sipMessage.encodeAsBytes(this.getTransport());
    sendMessage(bytes, receiverAddress, receiverPort, sipMessage instanceof SIPRequest);

    Commons.outgoingSIP = receiverAddress.toString();

但变量永远不会改变。我也把它导入了顶层(导入com.utility.Commons)。

还附加了库和源代码,否则程序将无法编译:

3

从jar内部我也可以按CTRL + CLICK Commons.outgoingSIP变量,它将把我带到commons.java。因此,知道我正在谈论的变量。

我错过了什么吗?有人可以给我一些建议。

1 个答案:

答案 0 :(得分:1)

我不确定你是否可以这样做 - 也许有一些反思。但是,我确信你不想这样做。

让库依赖于全局变量并不是一个好的库接口。您的图书馆客户可以专门告诉您需要了解的内容,而不是依赖可能存在或不存在的全局变量。

在您的情况下,将这样的内容添加到您的库中:

public class Config {
    private static String _outgoingSIP;
    public static void setOutgoingSIP(string sip) { _outgoingSIP = sip; }
    public static String getOutgoingSIP() { return _outgoingSIP; }
}

您的客户将致电Config.setOutgoingSIP,您的图书馆将使用Config.getOutgoingSIP

注意 - 您可以将_outgoingSIP设为公共静态变量,并让您的库代码直接访问它。我不太喜欢这种做法,但也许这是我的C#背景说话。