我正在尝试从另一个 class 调用方法,但它未定义
I'm trying to call method from another class but it is undefined
我在 class ReadFitsData 中创建了一个方法 sReadFitsData。我想在任何 class 中调用此方法。例如,来自 class TestRead。但相反,我遇到了编译错误:“方法 sReadFitsData(String) 未定义类型 TestRead”。
这是我的代码:
ReadFitsData.java
package readFits;
import java.io.IOException;
import nom.tam.fits.BasicHDU;
import nom.tam.fits.Fits;
import nom.tam.fits.FitsException;
import nom.tam.fits.Header;
public class ReadFitsData {
public int[][][] sReadFitsData(String fitsFileName) throws IOException, FitsException {
int[][][] myData;
Fits f; // fits object
Header hdr;
Object fData;
try {
f = new Fits (fitsFileName);
} catch (FitsException fEx) {
throw new IOException ("Failed to open FITS file; "+fEx.getMessage());
}
try {
BasicHDU hdu = f.getHDU(0); // 0 is for first header, 1 is for second one.
f.close();
//hdr = hdu.getHeader();
//int size = (int) hdr.getDataSize();
fData = hdu.getData().getData(); // Object fData
} catch (FitsException fEx) {
throw new IOException ("Failed to get Data; "+fEx.getMessage());
}
if (!fData.getClass().isArray()) {
throw new IOException ("Unknown HDU Data type: " + fData.getClass().getName());// + fEx.getMessage());
}
myData = (int[][][]) fData; // cast the fData to an int[][][]
return myData;
}
}
调用此方法的另一个 class:
TestRead.java
package readFits;
public class TestRead {
public static void main(String[] args){
String fname = "myFitsFile.fits";
int[][][] arr = sReadFitsData(fname); // here is the compilation error.
}
}
ADDITION 根据答案:
首先,我将方法 sReadFitsData 作为 public static 用于对象的独立性。
其次我导入了 class:
TestRead.java
import projectName.readFits.ReadFitsData;
同样的编译错误仍然存在。应该吗?:
int[][][] arr = sReadFitsData(fname); // error is still there
当我将这段代码导入或不导入时都可以:
int[][][] arr = ReadFitsData.sReadFitsData(fname); // working!
为了能够从不同的 classes
(更具体地说:不同的文件)调用方法,您需要 import
那些 classes
.
问题是,classTestRead
怎么知道sReadFitsData
是谁的方法,至少不是他自己的方法。
另一件事是,如果 TestRead
还定义了一个名为 sReadFitsData
的方法,您希望以某种方式能够区分这两种方法。
有两种方法可以解决这个问题。首先,您可以在方法调用前指定full class path
。为此,您可以将 TestRead
中的呼叫交换为:readFits.ReadFitsData.sReadFitsData(fname)
.
完整的 class 路径由所有包和 class 本身组成。
其次,您可以 import
class,在这种情况下您可能更喜欢什么。只需将此行添加到 TestRead
class 的开头,紧跟在包声明之后:import readFits.ReadFitsData;
它应该看起来像 ReadFitsData
class.
的其他导入
好的,这是第一个问题。但是,它现在也不会编译。您必须创建 class ReadFitsData
的实例并在其上调用方法:
ReadFitsData data = new ReadFitsData();
data.sReadFitsData(fname);
如果想让方法独立于对象,就需要做到static
:
public static int[][][] sReadFitsData(String fitsFileName) throws ... {
然后您可以从任何地方(导入后)通过 ReadFitsData.sReadFitsData(...)
调用该方法。
在这一点上我应该说你正在努力处理一些非常基本的 Java
事情。您阅读或观看一些初学者教程或书籍可能会更好:)
您可能会得到一个 IDE
,例如 eclipse
,用于与 Java
一起工作。这些程序会自动导入 classes,因为它们会检测到您可能想要使用的方法。他们还让你选择是否有多个。
我在 class ReadFitsData 中创建了一个方法 sReadFitsData。我想在任何 class 中调用此方法。例如,来自 class TestRead。但相反,我遇到了编译错误:“方法 sReadFitsData(String) 未定义类型 TestRead”。
这是我的代码:
ReadFitsData.java
package readFits;
import java.io.IOException;
import nom.tam.fits.BasicHDU;
import nom.tam.fits.Fits;
import nom.tam.fits.FitsException;
import nom.tam.fits.Header;
public class ReadFitsData {
public int[][][] sReadFitsData(String fitsFileName) throws IOException, FitsException {
int[][][] myData;
Fits f; // fits object
Header hdr;
Object fData;
try {
f = new Fits (fitsFileName);
} catch (FitsException fEx) {
throw new IOException ("Failed to open FITS file; "+fEx.getMessage());
}
try {
BasicHDU hdu = f.getHDU(0); // 0 is for first header, 1 is for second one.
f.close();
//hdr = hdu.getHeader();
//int size = (int) hdr.getDataSize();
fData = hdu.getData().getData(); // Object fData
} catch (FitsException fEx) {
throw new IOException ("Failed to get Data; "+fEx.getMessage());
}
if (!fData.getClass().isArray()) {
throw new IOException ("Unknown HDU Data type: " + fData.getClass().getName());// + fEx.getMessage());
}
myData = (int[][][]) fData; // cast the fData to an int[][][]
return myData;
}
}
调用此方法的另一个 class:
TestRead.java
package readFits;
public class TestRead {
public static void main(String[] args){
String fname = "myFitsFile.fits";
int[][][] arr = sReadFitsData(fname); // here is the compilation error.
}
}
ADDITION 根据答案:
首先,我将方法 sReadFitsData 作为 public static 用于对象的独立性。
其次我导入了 class:
TestRead.java
import projectName.readFits.ReadFitsData;
同样的编译错误仍然存在。应该吗?:
int[][][] arr = sReadFitsData(fname); // error is still there
当我将这段代码导入或不导入时都可以:
int[][][] arr = ReadFitsData.sReadFitsData(fname); // working!
为了能够从不同的 classes
(更具体地说:不同的文件)调用方法,您需要 import
那些 classes
.
问题是,classTestRead
怎么知道sReadFitsData
是谁的方法,至少不是他自己的方法。
另一件事是,如果 TestRead
还定义了一个名为 sReadFitsData
的方法,您希望以某种方式能够区分这两种方法。
有两种方法可以解决这个问题。首先,您可以在方法调用前指定full class path
。为此,您可以将 TestRead
中的呼叫交换为:readFits.ReadFitsData.sReadFitsData(fname)
.
完整的 class 路径由所有包和 class 本身组成。
其次,您可以 import
class,在这种情况下您可能更喜欢什么。只需将此行添加到 TestRead
class 的开头,紧跟在包声明之后:import readFits.ReadFitsData;
它应该看起来像 ReadFitsData
class.
好的,这是第一个问题。但是,它现在也不会编译。您必须创建 class ReadFitsData
的实例并在其上调用方法:
ReadFitsData data = new ReadFitsData();
data.sReadFitsData(fname);
如果想让方法独立于对象,就需要做到static
:
public static int[][][] sReadFitsData(String fitsFileName) throws ... {
然后您可以从任何地方(导入后)通过 ReadFitsData.sReadFitsData(...)
调用该方法。
在这一点上我应该说你正在努力处理一些非常基本的 Java
事情。您阅读或观看一些初学者教程或书籍可能会更好:)
您可能会得到一个 IDE
,例如 eclipse
,用于与 Java
一起工作。这些程序会自动导入 classes,因为它们会检测到您可能想要使用的方法。他们还让你选择是否有多个。