在java中的类之间进行通信

时间:2016-09-28 12:04:59

标签: java class

我是java的新手,并且对类之间的通信有疑问。说我在下面有这个例子。

  1. 我有一个字符串(打印),我发送到MyClass1
  2. 中的setter方法
  3. 在MyClass1中,我更改了getterMethod和ad“1”
  4. 中的字符串
  5. 我在mainclass中收到被操纵的字符串并将其发送到MyClass2中的setter-method
  6. 在MyClass2中,我再次更改字符串,广告“和2”,因此完整字符串为“print 1 and 2”
  7. 然后我通过My​​Class2中的gettermethod在mainclass中收到新字符串,并将结果打印在main方法中
  8. 结果是“打印1和2”

    这很好但是有更好的方法在类之间进行通信。对我来说,通过主类似乎还有很长的路要走。是否可以直接在MyClass1和MyClass2之间进行通信,而无需先通过主类?

    所以我的问题是:我有更好的方法吗?

    这是我的工作代码:

    主要类别:

    public class Testing1 {
    
        public static void main(String[] args) {
            String print = "Hello world";
    
            MyClass1 m1 = new MyClass1();
            MyClass2 m2 = new MyClass2();
    
            m1.setPrint(print);
    
            m2.setPrint(m1.getPrint());
    
            System.out.println("m2 = " + m2.getClass2());
        }
    }
    

    MyClass1的:

    public class MyClass1 {
    
        private String print = "";
    
        public MyClass1() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getPrint() {
            String print2 = print+" " + 1;
            return print2;
        }
    }
    

    MyClass2:

    public class MyClass2 {
    
        private String print = "";
    
        public MyClass2() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getClass2() {
            String print2 = this.print + " and 2";
            return print2;
        }
    }
    

2 个答案:

答案 0 :(得分:6)

良好的OO设计的重点是:某个对象A应该可以访问其他对象,它需要完成它的工作。

含义;通常你的课程看起来像:

public class Foo {
  private final Bar bar;
...

含义:任何 Foo 对象都有一个 bar 字段,其中包含 Bar 对象;并且这个 Foo 对象可以用来做 Foo 必须做的事情。

所以,如果你想MyClass1应该用MyClass2做一些事情,那么一个类应该有一个这种类型的字段;例如,使用构造函数初始化该字段。

但是,另一方面:良好的OO设计的另一个想法是一个班级有特定的责任。而且你想让你的课程变得小而且#34;尽可能;含义:您仔细考虑要在课程中使用哪些字段。换句话说:你试图创建一些小而有用的构建块"。然后,在更高的层次上,你使用小的构建块撰写某些东西"更大的"。从这个意义上讲,您当前的实现(其中 main 创建了多个对象;并分别调用它们来实现某些目标实际上是良好方法)。你看,你想要最后得到的东西:一些大班,负责"一切"!

最后:我知道我的回答是#34;非常通用和抽象的&#34 ;;但你的示例代码也是如此。含义:为了学习如何创建真正的设计;最好是处理真正的问题。你看,你发布的代码没有做某事"有用&#34 ;;因此,它的结构并不重要(很多)。在某种程度上,总是更容易给出具体的建议,即更具体的输入/任务。

答案 1 :(得分:0)

在Java中,getter / Setter模型通常用在Java Bean中,其中这些模型充当实际bean属性的包装器。 Setter通常验证数据并存储值,而getter通常会返回属性值。

即使在一般编程中,最好提供一个setter而不是直接字段访问,这样如果将来出现某些内容并且需要对该字段进行一些更改,那么可以在setter getter中轻松完成,而不会影响代码正在使用这些API。

对于您的示例,可以使用单个API代替getter和setter。如果该值不应存储在实例级别,则可以将此API设为static

示例:

class MyClass1{
  static String modifyString(String str){
    if(str == null){
      return null;
    }else{
      return (str + " 1");
    }
  }
}