gpt4 book ai didi

java - 如何使用Java模仿PHP匿名类?

转载 作者:行者123 更新时间:2023-12-02 01:31:40 26 4
gpt4 key购买 nike

我想实现 object composition 的强封装版本使用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...
}

我在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 错误说 Object 类不包含“text”属性。那么,是否可以像在 PHP 中一样在 Java 中使用匿名类(没有类名?)

提前致谢。

最佳答案

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

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

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是私有(private)内部类,外部类看不到它们。因此,您不能返回 Body 的实例并期望某个外部类能够对其进行操作,因为外部类甚至无法看到其定义来导入它。但是,如果您的 getter 和 setter 完全包含所有读/写运算符,那么这应该适合您的用例。

关于java - 如何使用Java模仿PHP匿名类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55961180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com