如何从另一个 class 中获取布尔值?

How to take a boolean value from another class?

我有一个 UDP 服务,可以告诉我们号码是否为 'capicua'。我有一个服务器 Class,它带有一个布尔值,它在 is 或 isnt 时设置它的值。当我从 class 客户端打电话告诉我即使使用 getter、setter 或返回实际的 booelan 值我也不能接受的布尔值时,你怎么看?

//CLIENT CLASS
//TIPICO INFINITY LOOP
        while(true) {
            System.out.println("Introduce un numero de "
                    + "al menos 2 cifras para ver si son capicúas. ");

            //METEMOS EN OUT ALL CONTENT 
            out =intToByteArray(Integer.parseInt(introducirDatos("Numero : "))) ;
            //ESCAPE
            if(byteArrayToInt(out)== 0) {
                System.out.println("Cerramos conexión...");
                break;
            }
            System.out.println("Enviando " + out.length + " bytes al servidor");
            envio = new DatagramPacket(out, out.length, IPServer, port );
            socket.send(envio);
//-------------------------------------------------------------------
            recibo = new DatagramPacket(in, in.length);
            System.out.println("Esperando datagrama...");
            socket.receive(recibo);

            IPOrigin = recibo.getAddress();
            int originPort = recibo.getPort();
            System.out.println("Procedente de: " + IPOrigin + ":" + originPort);

            boolean capicua = Servidor.isCapicua();
            System.out.println(capicua);



        }
        socket.close();
class Servidor{
static boolean capicua = true;

while (true) {

            System.out.println("Esperando datagrama...");

            // CONSTUIMOS NUESTRO DATAGRAMPACKET CON LOS DATOS DEL ARRAY DE BYTES
            recibo = new DatagramPacket(in, in.length);
            // RELLENAMOS EL SOCKET CON ALL CONTENT FROM RECIBO
            socket.receive(recibo);
            // ALMACENAMOS EN 'NUMERO' ALL CONTENT
            numero = new Integer(Cliente.byteArrayToInt(recibo.getData()));

            IPOrigin = recibo.getAddress();
            int port = recibo.getPort();
            System.out.println("Origen: " + IPOrigin + ":" + port);
            System.out.println("Mensaje recibido: " + numero);
            // VISUALIZMOS DATOS
            visualizar(recibo, socket);

            // AQUI ES DONDE TOCAMOS LA INFO RECIBIDA PARA DEVOLVER LA INFO ADULTERADA
            String answr = Integer.toString(capicuar(numero));

            if (numero == capicuar(numero)) {
                capicua = false;
            }
            System.out.println(capicua);

            // METEMOS LA INFO MODIFICADA EN DGP PARA ENVIAR
            // byte[] respuesta = Cliente.intToByteArray(answr);
            out = answr.getBytes();
            // PREPARAMOS EL ENVIO
            envio = new DatagramPacket(out, out.length, IPOrigin, port);
            // ENVIAMOS Y VUELTA A EMPEZAR

            socket.send(envio);
}
public static boolean isCapicua() {
        return capicua;
    }

    public static void setCapicua(boolean capicua) {
        Servidor.capicua = capicua;
    }

您可以按如下方式使用单例 class(您可以将单例 class 重命名为您想要的任何其他名称。)

public class SharedValues{

     private static SharedValues sharedValues = new SharedValues();
     //will always return the same instance of this class
     public static SharedValues getInstance() {
        return sharedValues;
     }

     private boolean capicua;

     public void setCapicua(boolean capicua)
     {
         this.capicua = capicua;
     }

     public boolean getCapicua()
     {
        return this.capicua;
     }
}

然后在class服务器和class客户端中,这样做:

class Servidor {
    SharedValues sharedValues = SharedValues.getInstance();

    //make sure this while loop code is in a function
    while(true)
    {
        if (numero == capicuar(numero)) {
            sharedValues.setCapicua(false);

        }
    }
}


class Client {
    SharedValues sharedValues = SharedValues.getInstance();

    //make sure this while loop code is in a function
    while(true)
    {
        boolean capicua = sharedValues.getCapicua();
        System.out.println(capicua);
    }
}

简单的解释一下,单例class就是一个class只能有一个实例。因此,SharedValues class 的同一个实例将被 class 服务器和 class 客户端访问。如果您因此将 Servidor 中的值设置为 setCapicua(false),那么在 class Client 中,如果您调用 getCapicua()。但是,您必须意识到,在 Client 和 Servidor 中,实例化都是 SharedValues sharedValues = SharedValues.getInstance(); 不要 使用 SharedValues sharedValues = new SharedValues(); 这将提供 [=26= 的新实例] SharedValues 并不会起到作用。