大家好,所以我得到了以下代码:
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;甚至是静态的,但它不能那样工作。
我做错了什么?
最佳答案
还有其他改进代码的方法,但着眼于当前的问题:您的困惑可能集中在tempLoc
的scope上。如果您有这样的事情:
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
的信息,因为尝试使用它可能表明您可能不完全了解它的实际用途。