我希望我说的是我的话。我有这样的课:
public class MainClass extends JFrame{
private JLabel mainlabel;
private SampleClass sample=new SampleCalss();
public void intital(){
mainlabel=new JLabel("Main");
sample.setMethod(getLabel());
//
//some code
//
add(mainlabel);
}
public static void main(){
intital();
}
public JLabel getLabel(){
return mainlabel;
}
}
和其他这样的类:
public class SampleClass extends JFrame{
private JButton button=new JButton("Change");
private JLabel sLabel;
public SampleClass(){
//somecode
//
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sLabel.setText("Sample text set");
}
});
add(jButton);
}
public void setMethod(JLabbel l){
sLabel=l;
}
}
这是mainlabel
从其他类(在该示例代码中SampleClass
)访问和更改其值的正确方法吗,是否有更好或更合适的解决方案?请注意,这MainClass
是具有main
方法的类。
从另一个类访问私有变量的正确方法是使用getter和setter方法。否则,您应该将该变量公开。
那是:
// getter
public JLabel getMainLabel() {
return mainlabel;
}
// setter
public void setMainLabel(JLabel mainLabel) {
this.mainlabel = mainLabel;
}
但是,直接返回私有数据是一种不好的做法-
允许外部代码修改您的私有状态。通常,您应该返回私有数据的副本,以使外部代码不会干扰类的内部。但是,如果您需要外部代码来调用私有数据上的方法,那么您可能应该在类中提供操作方法,而不是直接公开私有数据。
您可能 真的
想在主类中创建像setText()
和方法getText()
,然后在上调用setText()
和getText()
方法mainlabel
。但是,您需要注意这一点,因为您可能倾向于复制JLabel
类中定义的每个方法。这将使您的类及其使用者与JLabel
实现紧密结合。如果您JLabel
将来选择用其他产品代替,则需要花费大量工作才能平开已创建的联轴器。
问题内容: 我有以下课程 你好 嗨.java CustomMap.java 直到我从中删除访问说明符之前,这都可以正常工作 编译器大喊 类型speak.hi.CustomMap不 可见 现在,如果我没有修改的选项(第三方jar等),还有什么我可以使用的方法吗? 我知道的一个选项是转到,因为Hello已在程序包中,它可以访问程序包私有类。 还有其他方法吗?也许使用反射? 编辑 :按@StephenC
在Mainactive类中,我无法访问gamePanel变量或对象。在程序中稍后的其他类中,它运行良好。我遇到了以下错误: 类主要活动: 类游戏面板:
问题内容: 我的班级有一个名为DataStorage的哈希图: 如何在另一个类中访问此HashMap中的数据? 问题答案: 将HashMap创建为实例变量,并提供一种将其访问类API的方法:
我知道如何访问私有变量,但我正在尝试测试以下类: ProcessStatusResult: 在我的测试中,我需要在ProcessStatusBody中获取ProcessStatus来验证它,但我不知道如何做到这一点。 有没有一种方法可以使用反射(或其他方法)来访问它,而不必仅仅为了测试而在ProcessStatusResult中添加getter?
我正在尝试将我用Python制作的游戏移植到Java。在Python版本中,我将所有的方法和变量都放在一个“类”中,玩家是这样的字典: 游戏派克 然后分别添加玩家的数据值: 在Java版本中,我有一个单独的类用于定义玩家对象,以及游戏的主方法。 例如(这是一个小版本): 游戏java(省略返回) 游戏者java(省略返回) 假设,当要编译的两个类一起编译时,程序将能够运行,因为主变量是公共变量,并
问题内容: 假设我们有一个包含私有实例变量的类。 现在,让我们有另一个类,其中。如果在中没有定义访问器方法,可以在访问变量中使用非静态方法吗? 顺便说一下,我在用Java工作。 问题答案: 不,不符合Java语言规范,第3版: 6.6.8示例:私有字段,方法和构造函数 私有类成员或构造函数只能在包含该成员或构造函数声明的顶级类(第7.6节)的主体内访问。它不是子类继承的。 但是不管这种语言限制如何