大家好,所以我得到了以下代码:

String arch = System.getenv("PROCESSOR_ARCHITECTURE");
String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432");
String realArch = arch.endsWith("64")
    || wow64Arch != null && wow64Arch.endsWith("64")
       ? "64" : "32";

public String officeLoc() throws IllegalArgumentException, InvocationTargetException, IllegalAccessException{
if(realArch.contains("64")){
    String tempLoc = WinRegistry.readString (
        WinRegistry.HKEY_LOCAL_MACHINE,                     //HKEY
        "SOFTWARE\\Wow6432Node\\Microsfot\\Office",         //Key
        "InstallDir");                                      //ValueName
    System.out.println("Location = " + tempLoc);
    }else{
    String tempLoc = WinRegistry.readString (
        WinRegistry.HKEY_LOCAL_MACHINE,                     //HKEY
        "SOFTWARE\\Microsoft\\Office\\",                    //Key
        "InstallDir");                                      //ValueName
    System.out.println("Location = " + tempLoc);
    }
}


而且我无法将tempLoc值返回给officeLoc。我尝试使用返回字符串x;甚至是静态的,但它不能那样工作。
我做错了什么?

最佳答案

还有其他改进代码的方法,但着眼于当前的问题:您的困惑可能集中在tempLocscope上。如果您有这样的事情:

public String officeLoc () {
    if (...) {
        String tempLoc = ...;
    } else {
        String tempLoc = ...;
    }
}


然后,这两个不同的tempLoc变量的范围仅在它们周围的{}之间; tempLoc超出范围后将不再可见。因此,您将无法执行此操作(听起来像您已尝试过):

public String officeLoc () {
    if (...) {
        String tempLoc = ...;
    } else {
        String tempLoc = ...;
    }
    return tempLoc; // <- can't do this, tempLoc is out of scope
}


基本上,您有两个选择。您可以这样做:

public String officeLoc () {
    if (...) {
        String tempLoc = ...;
        return tempLoc; // <- no problem
    } else {
        String tempLoc = ...;
        return tempLoc; // <- no problem
    }
}


或者,您可以将tempLoc移至更高的范围,如下所示:

public String officeLoc () {
    String tempLoc; // <- declare it here
    if (...) {
        tempLoc = ...; // <- set its value
    } else {
        tempLoc = ...; // <- set its value
    }
    return tempLoc; // <- no problem
}


无论哪种方式,它都必须在return语句所在的范围内可见。就我个人而言,我更喜欢后者,因为我希望将返回点最小化作为样式选择,但这取决于您。

您可能还希望阅读一些有关static的信息,因为尝试使用它可能表明您可能不完全了解它的实际用途。

07-27 17:48