2009-08-28 9 views
4

同じ名前の.javaファイルにArionFileExtractorというクラスがあります。しかしコンストラクタは実際にStringsを返すことができますか?

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では必要であること。しかし、標準の文字列型java.lang.stringを返すようにArionFileExtractorをコーディングしました。

私のArionFileExtractorコンストラクタは合法的にStringを返すことができますか?

私がここで間違っていることに関するヒントや指摘を非常に感謝します。

+3

私はあなたが少しオブジェクト指向プログラミングについてもっと読むべきだと思います。あなたは単純なStringタスクのクラスを書くので、あなたはコンセプトを理解していないようです。 – stefita

+0

この度はありがとうございます。私は本に戻ります。 – elwynn

+0

@stefita、Javaではすべてがクラスなので、必要なのは静的メソッドですが、実際にはオブジェクト指向の意味ではないオブジェクトでも、クラスの周りをラップする必要があります。 – Yishai

答えて

15

コンストラクタは、オブジェクトを作成し、彼らはデータを返しません。

+1

コンストラクタは、戻り値の型が指定されておらず(voidでなくても)、クラス名と同じ識別子を持つメソッドです。何かを返すなら、あなたはコンストラクタを書くつもりはありません。コンストラクターは 'new'キーワードで呼び出されるので、' new'を使わずに既存のコンストラクターを使用しようとすると、間違ってしまいます。 HTH。 –

+0

これは良い点です。作成された新しいオブジェクトのインスタンスを実際に返します。単純な答え、あなたの評判には良い:-) – LB40

+1

もしそれについてpedantを取得したいのであれば、コンストラクタは何も返しませんが、変数に代入されると参照として評価されます。:P –

0

No. コンストラクタは実際に何も返しません。代わりに、問題のオブジェクトを構築します。あなたがここにユーティリティメソッドをしたいように見えます

public class Whatever { 
    public static String doStuff(String s) { 
     return s; 
    } 
} 
2

コンストラクタは通常のメソッドではありません。それは、それが属するクラスのインスタンスを常に返します。あなたの例ではArionFileExtractor。他のインスタンスを返す方法はありません。

コンストラクタの戻り値の型を明示的に指定することも、returnキーワードを使用することもできないことに注意してください(この文脈では無効です)。

+0

コンストラクタは何も返しません。インスタンスを返す新しい式(クラスインスタンス作成式)です。 ((バイトコードでもコンストラクタがvoidを返します) –

1

コンストラクタは、そのクラスのインスタンスのみを返すことができます。 Stringを返すことはできません。 たとえば、SampleClassクラスがある場合、コンストラクタはSampleClassクラスのオブジェクトのみを返すことができます。

+0

コンストラクタは何も返しません。データを初期化します。 –

5

コンストラクタは、作成したオブジェクトのインスタンスのみを返すことができます。それ以外の場合は、作成したばかりのオブジェクトに対してハングアップする参照がありません。あなたは、「ユーティリティ」コールをしたい場合は、静的な方法を検討:あなたの方法

ArionFileExtractor.getFileContents(...) 
+0

+1は静的メソッドへのヒントです。 – elwynn

+0

::をaに置き換えます。それはJavaなので、あなたはすべて設定されています。 :) – crunchdog

+0

実際には、Javaの 'ArionFileExtractor.getFileContents(...)'(何にも::を使用しません)です。しかし、とにかく+1。 –

9

を使用して呼び出すことができ

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()は、コンストラクタではありません。コンストラクターには戻り値の型がなく、次のようになります。

public ArionFileExtractor (String fName, String startText, String endText) { 
    //... 
} 

戻り値の型がないことに注意してください。

+0

+1のコード! – elwynn

1

いいえストリングを合法的に返すべきではありません。私はNetbeansがあなたがしようとしたときになぜあなたに馬鹿にしていないのか分かりません。たぶんそれは何らかの静的メソッドとしてコンパイルしようとしました。コンストラクターは一般に、コード内に戻り値の型を持たない。なぜなら、それらがコンパイルされるときには、構成しているクラスのインスタンスを返すように割り当てられるからです。

最も簡単なコードを適応させる方法空のコンストラクタを持っており、このような静的メソッドに現在のコンストラクタを回すことであろう(必ずしも最善けれども):プライベートコンストラクタはそれようになり

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"); 

が警告され、静的クラスを使用して、時には悪いフォームを考えられている - 状況に応じて。したがって、これを行うには別の方法を試してみる価値があるかもしれません。

+0

+1非常に便利なコメントです。 – elwynn

2

Javaコンパイラの扱いインスタンスメソッドとしてArionFileExtractor、これは驚くべきことであると同じくらい

String afe = new ArionFileExtractor().ArionFileExtractor("gibberish.txt", "foo", "/foo"); 
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"); 
+0

デフォルトのコンストラクタの問題を解決するための+1! – elwynn

0

Yes.Only Stringクラスのコンストラクター;)。

これは、基本的に、コンストラクタが呼び出すクラスのオブジェクトを作成することを意味します。

-1

オブジェクトをコンストラクタを使用して最初に作成する必要があります。そして、それを使ってオブジェクトを作成します。

Javaにはスマートなショートカットがほとんどありません。私は