java - 从另一种形式java更改值

标签 java variables static

我有一个主表单(RandomSend)和另一个名为(_user)的表单 在 randomsend 表单中,我声明一个公共(public)静态变量:

 public class RandomSend extends javax.swing.JFrame {
 ......
public static String userGender; // this variable I want to change from another form (_user)
....
}

在 RandomSend 类中,我声明了尝试更改 userGender 值的 _user 实例

 _user setGender = new _user();
  setGender.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
  setGender.setAlwaysOnTop(true);
  setGender.setVisible(true);

在 _user 表单(类)中,我尝试更改 userGender 值:

public class _user extends javax.swing.JFrame {......
     ....
     RandomSend.userGender="male";
     ....}

当我检查 _user 中的值时,RandomSend.userGender 的值为“male”

但从我的主表单来看,该值为空...

<小时/>

新新

我的尝试根据答案1 公共(public)类 RandomSend 扩展 javax.swing.JFrame {

/**
 *
 */

private static String userGender;
 .....
.....
// show dialogbox to select gender...
 _user setGender = new _user();
  setGender.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
  setGender.setAlwaysOnTop(true);
  setGender.setVisible(true);

....
....

// setter
public static void setUserGender(String gender)
{
    if(gender.toLowerCase().equals("female") ||gender.toLowerCase().equals("male"))
    userGender = gender;
    else userGender= "Unknown!!";
}

//getter
public static String getUserGender()
{
        return userGender;
 }

在另一个类(框架)中:

public class _user extends javax.swing.JFrame {
....
....

RandomSend.setUserGender("male");
..
..
..
}

但是 Randomsend.userGender 没有改变!

最佳答案

您可以通过使用在该对象上定义的 getter 和 setter 函数来更改对象成员值。要使用您的示例,您最终会得到如下结果:

public class RandomSend extend javax.swing.JFrame {
    // This should be preferred for values that can mutate (non-final) to prevent
    // modification without the owning class being alerted the value is changing
    private static String userGender;

    public static void setUserGender(String value) {
        userGender = value;
    }

    public static String getUserGender() {
        return userGender;
    }
}

使用此示例,您可以通过调用 RandomSend.setUserGender("male") 更改该值,并通过调用 RandomSend.getUserGender() 读取该值。

一些附加说明

我只是想指出我注意到的有关您的样本的一些其他事项。以您现在的方式使用静态值并不一定是最好的主意。您以错误的方式锁定了该类的使用。您应该维护 User 类的实例或管理特定于用户的信息(例如性别)的某种其他类型的类。通过管理实例而不是类上的静态值,您可以更轻松地处理应用程序中的其他用户(如果需要)。如果您确定您永远不需要支持当前用户以外的用户,那么您仍然可以使用实例,但使用 singleton pattern 来实现它。 .

看起来像:

public class SingletonExample {
    private static SingletonExample instance = null;

    // Declared private to prevent new SingletonExample 
    // outside of this class
    private SingletonExample {} 

    public static SingletonExample getInstance() {
        if (instance == null) {
            instance = new SingletonExample();
        }

        return instance;
    }
}

您可以通过获取像 SingletonExample.getInstance() 这样的实例来使用此类,然后对该实例进行操作。使用此方法可以保证您在项目中的所有点都访问同一对象的同一实例,从而在某种意义上实现“全局”。

我想要做的另一件事是尝试使用 final 值或更好的 enum 来代替诸如性别之类的字符串,您最有可能将其用作值(value)观。我这样说是因为为了正确比较性别,你必须这样做:

if (RandomSend.userGender.equals("male")) {
    // ...
}

如果您创建了一个带有以下常量的 Gender 类:

public Gender {
    public static final int MALE = 1;
    public static final int FEMALE = 2;
}

和比较(提供适当类中的值变化)

if (RandomSend.userGender == Gender.MALE) {
    // ...
}

并且不再传递浪费的字符串文字。这是一个很好的主意,Java 有一个独特的完整构造来提供此解决方案,称为enum。您可以像这样定义一个 Gender 枚举:

public enum Gender {
    MALE,
    FEMALE;
}

然后您将 userGender 声明为 Gender 值,并且您的比较与您自己从具有常量值的类构建枚举相同。从长远来看,这些更改可以使您的项目更易于管理和维护。

关于java - 从另一种形式java更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19570907/

相关文章:

java - 如何使用共享首选项保存 ListView

javascript - 这些迭代有什么不同?

javascript - 在哪里调用 session_unset(user)

python-3.x - 在spyder中python 3的ipython控制台上出现变量问题

java - 我应该使用静态字段还是 SharedPreferences 来存储自定义对象?

c - 使用全局指针变量访问静态值是否有效?

performance - Apache 在 Tomcat 之前安装,有什么好处?

java - Eclipse RCP : Target platform - Eclipse vs. 春分?

java - ClassNotFoundException : No RObject is found to match class type of org. redisson.RedissonMap 编解码器类型为 org.redisson.codec.JsonJacksonCodec

java.lang.NoClassDefFoundError : scala/StringContext