Я столкнулся с этим кодом в учебнике сокетов. Сначала мы создаем массив и поместить экземпляры clientThread в нем:java private class member
public class MultiThreadChatServer {
...
private static final clientThread[] threads = new clientThread[maxClientsCount];
...
clientSocket = serverSocket.accept();
int i = 0;
for (i = 0; i < maxClientsCount; i++) {
if (threads[i] == null) {
(threads[i] = new clientThread(clientSocket, threads)).start();
break;
}
}
А вот класс clientThread (часть):
class clientThread extends Thread {
private DataInputStream is = null;
private PrintStream os = null;
private Socket clientSocket = null;
private final clientThread[] threads;
private int maxClientsCount;
public clientThread(Socket clientSocket, clientThread[] threads) {
this.clientSocket = clientSocket;
this.threads = threads;
maxClientsCount = threads.length;
}
public void run() {
int maxClientsCount = this.maxClientsCount;
clientThread[] threads = this.threads;
try {
/*
* Create input and output streams for this client.
*/
is = new DataInputStream(clientSocket.getInputStream());
os = new PrintStream(clientSocket.getOutputStream());
os.println("Enter your name.");
String name = is.readLine().trim();
os.println("Hello " + name
+ " to our chat room.\nTo leave enter /quit in a new line");
for (int i = 0; i < maxClientsCount; i++) {
if (threads[i] != null && threads[i] != this) {
threads[i].os.println("A new user"+name+"entered the chat room");
}
}
Моя проблема заключается в последней строке кода: нити [I] .os.println(). 'os' - частный член, как можно получить доступ к нему за пределами своего собственного класса или без метода getter?
Пробег метода является членом clientThread. Почему он не должен иметь доступ к частному члену os на экземпляре clientThread? – odedsh
@lakshman - в этом нет никакого отражения, и это не нужно. –
Это в своем классе, насколько я могу судить ... –