构造函数实际上可以返回字符串吗?

时间:2009-08-28 14:23:02

标签: java string constructor return

我在同名的.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构造函数能合法地返回一个字符串吗?

我非常感谢有关我在这里做错的任何提示或指示。

11 个答案:

答案 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几乎没有智能快捷方式。我