2016-10-27 3 views
0

지도에 저장하는 동안 내 소켓 객체에 대한 다른 참조를 저장할 수 있도록 아래 프로그램에서 내 소켓에 대한 동적 참조를 만들고 싶습니다.자바에서 같은 클래스의 객체 참조를 만드는 법

Socket 클래스의 참조는 socket1로 작성되어야하고 다음에 socket2 등으로 동적으로 작성되어야합니다. socket + a를 사용하여 참조를 추가하려고 시도했지만이 이름으로 참조를 만들려고했지만 작동하지 않았습니다. 객체에 대한 동적 참조를 만드는 방법이 있습니까

int a = 0; 
public static void connect(int portNo, int trgtPNo , String webN) 
{ 

    try { 
     String x = Inet4Address.getLocalHost().getHostAddress().toString(); 
     InetAddress addr = InetAddress.getByName(x); 
String sock = "socket" + a; 
     Socket sock = new Socket(webN, trgtPNo , addr , portNo); 
    a++;   
    map.put(portNo,sock); 
     } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}} 

어떤 도움이 도움이 될 것입니다.

+0

변수 'a'는 정적이어야합니다. 동일한 변수 '양말'을 두 번 가질 수 있습니까? 이 코드는 컴파일하지 않는 것 같습니다 ... –

+0

Java에서 동적 변수 이름을 사용할 수 없습니다. 'String sock = "socket"+ a; Socket sock = ...'sock은 이미 String으로 정의되어 있기 때문에 이것은 작동하지 않습니다. 여러분은 여러분의 필요에 맞는'Map'을보아야합니다. – jhamon

답변

1

프로그램이 실행 중일 때 변수 이름을 동적으로 설정할 수 없습니다. 변수 이름은 코드를 작성할 때만 결정됩니다. 대신 소켓의 인스턴스 을 설정할 수 있습니다. 예를 들어, 10 개 인스턴스를 만들려면 다음

try { 
    int socketsNum = 10; 
    String x = Inet4Address.getLocalHost().getHostAddress().toString(); 
    InetAddress addr = InetAddress.getByName(x); 
    Socket[] sockets = new Socket[socketsNum]; 
    for (Socket s : sockets) { 
     s = new Socket(webN, trgtPNo , addr , portNo); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

그런 다음 예를 socket[5]를 들어, 자신의 인덱스 번호와 소켓 인스턴스를 얻을 수 있습니다.

미리 인스턴스의 수를 결정하지 않으려면 Array 대신 ArrayList()을 사용할 수 있습니다.

관련 문제