【问题标题】:Accessing string variable that is defined in other class of other package访问在其他包的其他类中定义的字符串变量
【发布时间】:2013-03-06 09:11:48
【问题描述】:

虽然看起来很简单,但我还是低下了头。

所以我的类 Common.java 为:

    package com.spil.util;
       public class Common extends Fragment implements SubscriptionListener
         {
           String WEBSERVICE = "http://webservice.carrierservice.com/";  
         }

而类DownloadDataActivity.java为:

package com.spil.main;
public class DownloadDataActivity extends TimerTask {
String WEBSERVICE = "http://webservice.carrierservice.com/";    
}

我不希望 string WEBSERVICE 重复,所以我想从 Common.java 访问它。

所以我将Common.java 更改为string WEBSERVICE

  public static String WEBSERVICE = "http://webservice.carrierservice.com/"; 

然后在DownloadDataActivity.java 中,我以如下方式访问它:

public static String WEBSERVICE = Common.WEBSERVICE ;

这很好,但我的问题是:

string variable 更改为 public static string variable 只是为了在另一个类中访问它以及它将如何影响范围,因为我假设这个公开的 url 将允许从任何地方访问它吗?

但除了在每个类中定义两次 URL 之外,我没有找到任何替代方法。

【问题讨论】:

    标签: java android scope


    【解决方案1】:

    好吧,你可以声明一个常量 String,你可以将它保存在可以在应用程序级别访问的 Constants 类中。

    public final class Constants {
        public static final String WEBSERVICE = "http://webservice.carrierservice.com/";
        // other application level constants
    }
    

    使用静态导入为应用程序中的任何位置访问常量:

    package com.spil.main;
    
    import static comp.app.util.Constants.WEBSERVICE;
    
    public class DownloadDataActivity extends TimerTask {
       someMethod() {
          makeCallToService(WEBSERVICE, otherParams);
       }
    }
    

    这将是正确的方法。

    要使用常量,好的做法是在各个类中使用常量,前提是这些常量不会在任何地方使用。

    如果要从整个应用程序中访问常量,您可以像上面一样在一个类中定义这些常量并使用上述方法。

    【讨论】:

    • 这是合理的,但是将敏感的 url 范围从 String WEBSERVICE= 更改为 public static final String WEBSERVICE= 只是为了在另一个类中使用它似乎很好?它不会被修改,因为它是最终的,但它现在是公开的,所以它是可访问的。
    • @NandkumarTekale:恕我直言,对于敏感信息,不建议公开披露超过冗余。 (对于像凭证这样的信息,最好多添加几行并使其比公开更安全)。 PS:这只是我的意见,而不是最佳实践等。
    • 常量的公开暴露意味着如果您有接口并且您将该接口作为 API 合同暴露在这种情况下,您所说的就可以了。在上述情况下,您正在使用类,而实现就在您手中。
    • 谢谢,您最后的评论正是我想要的。答案增加了价值。
    【解决方案2】:

    是的,public 将使其可以从您的应用程序中的任何位置访问
    这取决于字符串是否包含一些您不想暴露给代码其他部分的信息。 您不希望其他开发人员(或您自己)从其他任何地方意外/无意地访问它,然后将其设为私有。
    否则,即使意外访问也不会造成任何伤害,那么将其公开就可以了,这样您就可以避免几行冗余代码。
    第二部分是如果您想允许其他部分更新您的属性。 此外,如果您想对 String 使用相同的值,则将其设为 final。
    这可能有助于Class attribute declaration: private vs public

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 2015-02-05
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      相关资源
      最近更新 更多