我有三节课。
A类扩展了jFrame(这是主要的用户界面)
B类扩展了jPanel(这个被调用出现在主jFrame中)
和C类进行一些文件处理和处理。
我要做的是在A类中实例化C类对象并在B类中调用它。
以下是一些示例代码:
Public Class A extends javax.swing.JFrame {
Public A(){
C ObjectOfC = new C();
B panelWithButtons = new B();
}
}
public Class B extends javax.swing.JPanel{
String s = ObjectOfC.getName();
}
public Class C{
String name;
public String getName(){
return this.name;
}
}
无论如何要完成这项工作?还是失败的原因?
答案 0 :(得分:2)
有很多方法可以做到这一点,具体取决于您要完成的任务。您可能希望构建一个构造函数或B的方法,它将对象C作为参数。
示例:
Public Class A extends javax.swing.JFrame {
Public A(){
C objectOfC = new C();
B panelWithButtons = new B(objectOfC);
}
}
public Class B extends javax.swing.JPanel{
String s;
public B (C objectOfC) {
this.s = objectOfC.getName();
}
}
public Class C{
String name;
public String getName(){
return this.name;
}
}
根据你的评论单身例子:
Public Class A extends javax.swing.JFrame {
Public A(){
B panelWithButtons = new B();
}
}
public Class B extends javax.swing.JPanel{
String s;
objectOfC C = C.getInstance();
this.s = objectOfC.getName();
}
public class C {
private static String name;
private static final C INSTANCE = new C();
private C() {}
public static C getInstance() {
return INSTANCE;
}
public static String getName() {
return this.name;
}
}
更改变量的单例示例(以及从原始代码中删除的错误。):
public class A extends javax.swing.JFrame {
public A() {
C objectOfC = C.getInstance();
objectOfC.setName("Bob");
B panelWithButtons = new B(objectOfC);
System.out.println("objectOfC_A:" + objectOfC.getName()); //return "George"
}
}
public class B extends javax.swing.JPanel {
public B (C objectOfC) {
C c2 = C.getInstance();
objectOfC.setName("Fred");
c2.setName("George");
System.out.println("objectOfC_B:" + objectOfC.getName()); //returns "George"
System.out.println("c2: " + c2.getName()); //returns "George"
}
}
public class C {
private static String name;
private static final C INSTANCE = new C();
private C() {}
public static C getInstance() {
return INSTANCE;
}
public String getName() {
return C.name;
}
public void setName (String name) {
C.name = name;
}
}
使用此示例,您可以从任何类调用C.getInstance,它们将共享同一个实例。但是,您必须小心如何访问该对象;有很多关于多线程单例的教程,如果你打算同时从多个对象修改C实例中的数据,你需要做的。