Как мне вызвать переменную, которую я сделал в Java, не вызывая пакет? (его в том же классе) - PullRequest
0 голосов
/ 03 декабря 2011

Итак, это мой код:

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

В нем говорится, что «сервер не может быть преобразован в тип».Как видите, я создал переменную под названием «сервер».Как я могу использовать server.accept ()?О, и я попробовал Socket sock = new this.server.accept(); и Socket sock = new accept(); и Socket sock = new this.accept();, но ни один из них не работает.

Ответы [ 3 ]

4 голосов
/ 03 декабря 2011

Вы пытаетесь создать новый объект или вызвать метод для существующего? Если вы просто хотите использовать server.accept(), вам нужно удалить new перед вызовом метода:

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

Ключевое слово new используется только тогда, когда вы хотите создать экземпляр типа. Если у вас есть экземпляр этого типа, вам больше не нужно использовать new снова, и вы можете просто вызывать методы для него, используя переменную, содержащую этот экземпляр.

В настоящее время компилятор пытается использовать server в качестве типа, поэтому вы получаете сообщение об ошибке, что оно не разрешено ни для одного. : D

1 голос
/ 03 декабря 2011

Язык Java ожидает, что за new будет следовать имя класса или имени типа массива, и говорит, что вы создаете новый объект.

Но вы не пытаетесь создать новый объект здесь,Вы пытаетесь вызвать метод accept() на существующем объекте.

Избавиться от new во 2-й строке.


Причина этого запутанного сообщения заключается в том, чточто компилятор считает , что вы пытаетесь создать объект, и пытается сопоставить "server.accept" с определенным именем класса;т.е. класс с именем «accept» в пакете «server».Ни один из них не существует, поэтому он говорит, что не может этого сделать.Причина, по которой он не осознает, что имя «сервера» является именем вашей переменной, заключается в том, что идентификаторы переменных и идентификаторы классов и пакетов находятся в разных пространствах имен.Чтобы проиллюстрировать это, если вы определили класс следующим образом:

package server;
public class accept {
}

, тогда ваш двухстрочный кодовый код выдаст другую ошибку компиляции, такую ​​как сервер «Вы не можете назначить объект типа».принять "к переменной типа Socket".

0 голосов
/ 03 декабря 2011

Похоже, проблема в том, что компилятор не может разрешить "ServerSocket".

Q: Где определен этот класс?

Один, который вы выделяете "сервер" (то есть, если у вас естьэкземпляр «ServerSocket»), тогда вам НЕ нужно вызывать «new».

ПРЕДЛАГАЕМЫЕ ИЗМЕНЕНИЯ:

import java.net.*;

public class MyClass {

  public void SomeMethod () {
    int port = SomeNumber;
    ...
    try {
      java.net.ServerSocket socket = new ServerSocket (port);
      Socket clientSocket = socket.accept ();
      ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...