什么是静态上下文变量

时间:2019-01-20 22:03:01

标签: java

public Locator(Context mContext){
    getLocation();
    this.mContext = mContext;
}

public void setLatitude ( String lat ){
    this.latitude = lat;
}

public String getLatitude ( ){
    return latitude;
}

public void setLongitude ( String lon ){
    this.longitude = lon;
}

public String getLongitude ( ){
    return longitude;
}

public void getLocation ( ){
    LocationManager lm = (LocationManager)mContext.getSystemService ( Context.LOCATION_SERVICE ); 
    Location location = lm.getLastKnownLocation ( LocationManager.GPS_PROVIDER );
    longitude = String.valueOf(location.getLongitude());
    latitude = String.valueOf(location.getLatitude());
}

public static String getURL(){
    return "api.openweathermap.org/data/2.5/weather?lat=" + latitude + "&lon=" + longitude + "APPID=" + APPID;
}

纬度和经度变量都给我带来静态上下文错误,也给我带来了调用函数的错误。 我尝试使它们成为静态变量,但没有运气。有什么想法吗?

在代码的另一部分中,但是无论我做什么,都会在某处收到静态上下文错误:

final String url = getApiUrlFromAreaId(areaId);

static String getApiUrlFromAreaId ( String areaId ){
    return URL + areaId;
}

没有,我的编程没有达到标准。请忍受我

2 个答案:

答案 0 :(得分:1)

您有

public static String getURL()

这意味着可以在不使用类实例的情况下调用此方法。因此,该方法中使用的所有内容也必须是静态的(如果未作为参数传递)。

我只能假设纬度,经度或appId不是静态的。 也可以将它们设置为静态,或者从static中删除getUrl限定词。

答案 1 :(得分:0)

假设func parseCSVFile(filePath string) []LabelWithFeatures { fileContent, _ := ioutil.ReadFile(filePath) lines := bytes.Split(fileContent, newline) numRows := len(lines) labelsWithFeatures := make([]LabelWithFeatures, numRows-2) for i, line := range lines { // skip headers if i == 0 || i == numRows-1 { continue } labelsWithFeatures[i-1] = NewLabelWithFeatures(bytes.Split(line, comma)) } return labelsWithFeatures } latitude变量的声明如下所示:

longitude

,并且您打算像这样从另一个类调用它:

public class Locator{
   private String latitude; //Notice this var is not static.
   private String longitude; //Notice this var is not static.
}

然后,您必须将Locator loc = new Locator(someContext); String url = loc.getURL(); 方法声明为非静态方法,这意味着可以在变量上调用该方法,并且必须在内部使用getURLlatitude变量来构成URL是所述实例的URL。所以这样声明:

longitude

现在,如果您的意图是这样称呼:

public String getURL(){
   return "api.openweathermap.org/data/2.5/weather?" +
      "lat=" + latitude + //This instance's latitude
      "&lon=" + longitude + //This instance's longitude
      "APPID=" + APPID;
}

然后请注意,Locator loc = new Locator(someContext); String url = Locator.getURL(loc); 是该类的静态方法,而是该类实例的方法。如果这是您的目标,请像这样声明getURL

getURL