我有一个Android库项目,几个Android应用程序项目使用它。库jar(具有.class文件)附加到项目并位于lib文件夹中。
我正在尝试将变量com.utility.Commons.outgoingSIP(string)设置为jar中的变量。
在Commons.java中声明:public static String outgoingSIP = "";
这是一个代码片段:
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)。
还附加了库和源代码,否则程序将无法编译:
从jar内部我也可以按CTRL + CLICK Commons.outgoingSIP变量,它将把我带到commons.java。因此,知道我正在谈论的变量。
我错过了什么吗?有人可以给我一些建议。
答案 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#背景说话。