0

我想使用 Java实现一个强大的对象组合封装版本。我当前的 PHP 代码如下:

<?php

class Email {
    private $subject;
    private $body;
    private $recipient;

    public function __construct() {
        $this->subject = new class {
            public $text;
        };
        $this->body = new class {
            public $text;
            public $format;
        };
        $this->recipient = new class {
            public $address;
        };
    }
    public function setSubject($text){
        $this->subject->text = $text;
    }
    //more getters & setters...
}

我已经在 J​​ava 中尝试过,但没有成功:

public class Email {

    private Subject      subject;
    private Body         body;
    private Recipient    recipient;

    public Email() {
        this.subject = new Object() {
            public String text;
        };
        this.body = new Object() {
            public String text;
            public String format;
        };
        this.recipient = new Object() {
            public String address;
        };
    }

public void setText(String text){
      this.body.text = text;
    }
//more getters & setters...

}

JDK 错误指出 Object 类不包含“文本”属性。那么,是否可以像在 PHP 中一样在 Java 中使用匿名类(没有类名?)

提前致谢。

4

1 回答 1

2

所以我不是 PHP 开发人员——我做过一次 PHP 5,这就足够了——所以我不是 100% 了解 PHP 在这种情况下支持的所有方面。

但是,我认为您想要的是私有内部类。公共类可以有只有它可以访问的私有内部类。因此,对于您的电子邮件示例...

public class Email {
  private Subject      subject;
  private Body         body;
  private Recipient    recipient;

  public Email() {
    this.subject = new Subject();
    this.body = new Body();
    this.recipient = new Recipient();
  }

  public void setText(String text){
    this.body.text = text;
  }
  //more getters & setters...

  private class Subject {
    public String text;
  }
  private class Body {
    public String text;
    public String format;
  }
  private class Recipient {
    public String address;
  }
}

由于 Subject、Body、Recipient 是私有的内部类,外部类是看不到它们的。因此,您不能返回 Body 的实例并期望某个外部类能够对其进行处理,因为外部类甚至看不到它的定义来导入它。但是,如果您的 getter 和 setter 完全包含所有适合您的用例的读/写运算符。

于 2019-05-02T22:55:20.113 回答