【问题标题】:How to make two classes reference the same object and its methods如何让两个类引用同一个对象及其方法
【发布时间】:2015-05-11 10:51:29
【问题描述】:

所以我试图让我创建的对象与第二类中的相应对象具有相同的变量和方法,而不使用静态方法等。我能想到的最好方法可能是使用方法类似于:

 public void setObjectReference(Object object){
 object = this.object;
 }

我的问题是我想在类之间引用一些对象,这种方法意味着我必须创建一个具有不同 this.object; 的方法来更改每个方法的名称。这似乎是一种相当低效的方法,我确信有一些更好的方法可以使两个类中的两个对象引用所述对象的同一个实例。

干杯

编辑:

我正在尝试使用名为 name 的对象,在这个对象中有一些方法,即 getName() setName() 等。我希望能够在我的第一堂课中使用 setName() 设置一个值,然后在我的第二堂课中使用getName()。我正在尝试在控制器之间通信的 javafx 应用程序中实现这一点

希望能有所帮助

【问题讨论】:

  • ....这毫无意义。所以,你会假设如果你有一个类 Boy 和一个类 Girl,仅仅因为它们提供相同的成员,它们是可以互换的,并且一个 Object 可以既是 Girl 又是 Boy?
  • object = this.object 不会改变任何东西,如果对象是你类的成员。
  • @NaN 它重新引用了本地对象变量,这确实有点浪费代码。我假设他的意思是 this.object = object;
  • @Stultuske 我正试图让一个对象在第二个类中引用另一个对象,因此,例如,当我在类#1 中使用setValue() 之类的东西时,然后在类#2可以从getValue() 方法返回的变量是等效的。还是这种方法是不必要的,我错过了什么?
  • 告诉我们更多关于您要解决的问题。你所说的方法对于面向对象的范式来说是非常不典型的。

标签: java class object methods reference


【解决方案1】:

你是在正确的方式,但你混合对象和名称。您不需要相同的名称来访问相同的值 - 您需要相同的对象。在两个类之间进行共同通信的方法之一是拥有公共对象并在两个类中使用它。像这样的

class Context{
  String Name;
  public void setName(String name){
    this.Name=name;
  }
  public String getName(){
    return Name;
  }
}

class Controller1{
   Context context;
   public Controller1(Context context){
      this.context=context;
   }
   public void someMethod(){
      context.setName("Alex");
   }
}
class Controller2{
   Context context;
   public Controller2(Context context){
      this.context=context;
   }
   public void anotherMethod(){
      String nameFromFirtsController=context.getName();
   }
}

当然缺少很多东西,包括同步,还有更有效的方法,如 Observer/Observable 或消息传递,但我们正在讨论您的方法,我想展示基本思想。

附:你肯定是说

this.object = object;

在你的类实例中保存价值。

【讨论】:

  • 我刚刚尝试过使用它,但出现了一些错误,java.lang.NoSuchMethodExceptionjava.lang.InstantiationException。正如您可能知道的那样,我不是最有经验的 java,但似乎是导致错误的控制器的构造函数,我不确定您是否可以或不能在 javafx 控制器中使用构造函数,我会假设你可以但也许不是
  • 这是基本示例的基本解释。您可以使用 setContext(Context context) 方法代替控制器构造函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2019-12-27
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
相关资源
最近更新 更多