如何使用 Java 模仿 PHP 匿名 class?
How to mimic PHP anonymous class using Java?
我想使用 Java 实现 object composition 的强大封装版本。我在 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...
}
我在 Java 中尝试过,但没有成功:
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 错误说对象 class 不包含 "text" 属性。
那么,是否可以像在 PHP 中那样在 Java 中使用匿名 classes(没有 classes 名称?)
提前致谢。
所以我不是 PHP 开发人员 -- 我做了 PHP 5 一次就足够了 -- 所以我在 [=20= 的所有方面都不是 100% ] 在这种情况下支持。
不过,我想你想要的是私有内部 classes。 public class 可以拥有只有它可以访问的私有内部 classes。因此,对于您的电子邮件示例 ...
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;
}
}
由于主题、正文、收件人是私有内部 classes,外部 classes 看不到它们。所以你不能 return 一个 Body 的实例并期望一些外部 class 能够在它上面工作,因为外部 class 甚至不能 查看 其定义以导入它。但是,如果您的 getter 和 setter 完全包含所有 read/write 运算符,那么应该适合您的用例。
我想使用 Java 实现 object composition 的强大封装版本。我在 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...
}
我在 Java 中尝试过,但没有成功:
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 错误说对象 class 不包含 "text" 属性。 那么,是否可以像在 PHP 中那样在 Java 中使用匿名 classes(没有 classes 名称?)
提前致谢。
所以我不是 PHP 开发人员 -- 我做了 PHP 5 一次就足够了 -- 所以我在 [=20= 的所有方面都不是 100% ] 在这种情况下支持。
不过,我想你想要的是私有内部 classes。 public class 可以拥有只有它可以访问的私有内部 classes。因此,对于您的电子邮件示例 ...
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;
}
}
由于主题、正文、收件人是私有内部 classes,外部 classes 看不到它们。所以你不能 return 一个 Body 的实例并期望一些外部 class 能够在它上面工作,因为外部 class 甚至不能 查看 其定义以导入它。但是,如果您的 getter 和 setter 完全包含所有 read/write 运算符,那么应该适合您的用例。