2011-12-03 7 views
0

だから、これは私のコードです:パッケージを呼び出さずにJavaで作成した変数をどのように呼び出すことができますか? (その同じクラスで)

ServerSocket server = new ServerSocket(port); 
Socket sock = new server.accept(); 

それは、「サーバがタイプに解決することはできません」と言います。
ご覧のとおり、私は "server"という変数を作りました。 server.accept()はどのように使用できますか?
ああ、私はSocket sock = new this.server.accept();Socket sock = new accept();Socket sock = new this.accept();を試しましたが、どれもうまくいきませんでした。

答えて

4

新しいオブジェクトを作成したり、既存のオブジェクトを作成しようとしていますか?あなただけserver.accept()を使用する場合は、メソッド呼び出しの前newを削除する必要があります。

ServerSocket server = new ServerSocket(port); 
Socket sock = server.accept(); 

new keywordあなたはタイプをインスタンス化したい場合にのみ使用されます。その型のインスタンスを取得したら、再度newを使用する必要はなく、そのインスタンスを含む変数を使用してメソッドを呼び出すことができます。

現在、コンパイラは型としてserverを使用しようとしています。そのため、コンパイラは型に解決されていないと不平を言っているのです。 :D

-1

コンパイラが "ServerSocket"を解決できないという問題のようですね。

Q:このクラスはどこに定義されていますか?

「サーバー」(つまり「ServerSocket」のインスタンスを取得した後)を割り当てると、「新規」を呼び出す必要はありません。

提案CHANGE:

import java.net.*; 

public class MyClass { 

    public void SomeMethod() { 
    int port = SomeNumber; 
    ... 
    try { 
     java.net.ServerSocket socket = new ServerSocket (port); 
     Socket clientSocket = socket.accept(); 
     ... 
+0

ヒント:コンパイラはServerSocketを探していませんが、 "server" –

+0

@ Yanick Rochon:ヒント - 私はただ助けようとしています。あなたの "ヒント"(とあなたの不当なdownvotes)は歓迎されていません:) – paulsm4

+2

あなたの答えの最初の部分は単に正確ではない、と私は*私はdownvoted理由を伝えるために*親切でした。これは私が個人的に持っているものよりはるかに多いです。 –

1

Java言語がnewは、クラス名または配列型の名前が続くことを期待して、新しいオブジェクトを作成していると述べています。

ここで新しいオブジェクトを作成しようとしていません。既存のオブジェクトに対してaccept()メソッドを呼び出そうとしています。

2行目にnewを取り除いてください。


やや紛らわしいメッセージの理由は、コンパイラあなたがオブジェクトを作成しようとしている、と修飾クラス名で「server.accept」と一致しようとしているを考えているということです。すなわち、「サーバ」パッケージ内の「受諾」と呼ばれるクラスである。これらのどちらも存在しないので、それはできません。 "サーバー"の名前が変数の名前であることに気付かない理由は、クラスとパッケージの変数と識別子の識別子が異なる名前空間にあるためです。あなたは、クラスを定義した場合を説明するために、次のように:

package server; 
public class accept { 
} 

、あなたの2つのラインのコードスニペットはserver.accept「あなたは型のオブジェクトを割り当てることはできません 『の線に沿って、さまざまなコンパイルエラーを与えるだろう』型Socket "の変数に追加します。

関連する問題