我在同名的.java文件中有一个名为ArionFileExtractor的类。
public class ArionFileExtractor {
public String ArionFileExtractor (String fName, String startText, String endText) {
String afExtract = "";
// Extract string from fName into afExtract in code I won't show here
return afExtract;
}
但是,当我尝试在另一个.java文件中调用ArionFileExtractor时,如下所示:
String afe = ArionFileExtractor("gibberish.txt", "foo", "/foo");
NetBeans通知我存在不兼容的类型,并且需要java.lang.String。但我编写了ArionFileExtractor来返回标准字符串类型,即java.lang.string。
我想知道,我的ArionFileExtractor构造函数能合法地返回一个字符串吗?
我非常感谢有关我在这里做错的任何提示或指示。
答案 0 :(得分:15)
构造函数创建对象,它们不返回数据。
答案 1 :(得分:9)
您的方法ArionFileExtractor()
不是构造函数。消费者没有返回类型,如下所示:
public ArionFileExtractor (String fName, String startText, String endText) {
//...
}
请注意缺少返回类型。
答案 2 :(得分:5)
构造函数只能返回它构造的对象的实例 - 否则你没有引用它来挂在你刚刚创建的对象上!如果要进行“实用程序”调用,请考虑使用静态方法:
public class ArionFileExtractor {
public static String getFileContents(String fName, String startText, String endText) {
String afExtract = "";
// Extract string from fName into afExtract in code I won't show here
return afExtract;
}
}
可以使用
调用ArionFileExtractor.getFileContents(...)
答案 3 :(得分:4)
尽管这很令人惊讶,但您创建的代码具有默认的无参数构造函数。 ArionFileExtractor是一个返回String的方法。当我第一次看到执行此操作的代码时,我感到很惊讶,因为这肯定是一个意外(就像你的情况一样)。
您可以通过以下方式呼叫您方法(只是为了表明这种情况):
String afe = new ArionFileExtractor().ArionFileExtractor("gibberish.txt", "foo", "/foo");
你真正想要的是一个静态的方法,而不是一个类。
public class ArionFileExtractor() {
public static String extract(String fName, String startText, String endText) {
String afExtract = "";
// Extract string from fName into afExtract in code I won't show here
return afExtract;
}
}
你打电话给:
String afe = ArionFileExtractor.extract("gibberish.txt", "foo", "/foo");
答案 4 :(得分:2)
构造函数不是常规方法。它总是返回它所属的类的实例。在你的例子ArionFileExtractor中。无法返回任何其他实例。
请注意,您不能显式指定构造函数的返回类型,也不能使用return关键字(在此上下文中为非法)。
答案 5 :(得分:2)
Java编译器将 ArionFileExtractor 视为实例方法,
String afe = new ArionFileExtractor().ArionFileExtractor("gibberish.txt", "foo", "/foo");
答案 6 :(得分:1)
构造函数只能返回其类的实例。它不能返回String。 例如,如果您有类SampleClass,则构造函数只能返回类SampleClass的对象。
答案 7 :(得分:1)
不,它不能合法地返回一个字符串。我不确定为什么Netbeans在你试图的时候不会简单地对你bar。也许它试图将其编译为某种静态方法。构造函数通常在代码中没有返回类型,因为在编译它们时,它们被指定为返回它们正在构造的类的实例。
调整代码的最简单(但不一定是最好的)方法是使用空构造函数并将当前构造函数转换为静态方法,如下所示:
public class ArionFileExtractor {
private ArionFileExtractor() {}
public static String ExtractFile(String fName, String startText, String endText) {
String afExtract = "";
// Extract string from fName into afExtract in code I won't show here
return afExtract;
}
}
私有构造函数使得ArionFileExtractor只能静态使用而无法实例化。然后当你使用它时,你只需这样做:
String afe = ArionFileExtractor.ExtractFile("gibberish.txt", "foo", "/foo");
请注意,使用静态类有时会被视为不良形式 - 具体取决于具体情况。所以尝试提出一种不同的方法来做这件事可能是值得的。
答案 8 :(得分:0)
没有。 构造函数并没有真正返回任何内容。相反,它构建了有问题的对象。
看起来你想要一个实用工具方法:
public class Whatever {
public static String doStuff(String s) {
return s;
}
}
答案 9 :(得分:0)
Yes.Only String类构造函数可以从中返回字符串对象;)。
这基本上意味着构造函数创建了您正在调用的类的对象。
答案 10 :(得分:-1)
你需要首先创建对象(使用构造函数),然后用它做一些事情。
Java几乎没有智能快捷方式。我