- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道你不能在 Java 中扩展多个类。因此,我需要帮助解决这个问题。
我有这些类(class):
abstract class ObjWithID {
final int id;
public ObjWithID(int id) {
this.id = id;
}
}
abstract class ObjWithIDActivity extends ObjWithID {
public ObjWithIDActivity(int id) {
super(id);
}
boolean active;
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}
abstract class ObjWithIDPriority extends ObjWithID {
public ObjWithIDPriority(int id) {
super(id);
}
int priority;
public void setPriority(int priority) {
this.priority = priority;
}
public int getPriority() {
return priority;
}
}
我的一些类(class)(大多数)都需要 activity
和priority
。因此,在完美的世界中,我会这样写:
class Employee extends ObjWithIDPriority, ObjWithIDActivity implements Comparable<Header> {
public Employee(int id) {
super(id);
}
@Override
public int compareTo(Header o) {
return Integer.compare(o.priority, priority);
}
}
当然,您不能扩展多个类。
在我当前的代码中,我只是创建了第三个类:
abstract class ObjWithIDActivityPriority extends ObjWithID {
public ObjWithIDActivityPriority(int id) {
super(id);
}
boolean active;
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
int priority;
public void setPriority(int priority) {
this.priority = priority;
}
public int getPriority() {
return priority;
}
}
但是,这导致我必须编写更多代码,因为如果我创建一个接受 ObjectWithIDActivity
的方法,我就必须编写更多代码。作为参数,我需要将其复制为 ObjWithIDActivityPriority
s。
我尝试过使用 interface
的多重继承解决方法s,但这会导致问题,因为我正在使用字段 int id
, int priority
,和boolean active
以及这些字段的 getter/setter。另外,接口(interface)不能有构造函数。
那么,实现这一点的最佳方法是什么?第三类是唯一的选择吗?
最佳答案
我对构图的看法:
public interface IDItf {
abstract int getId();
abstract void setId(int id);
}
class IDSupport implements IDItf {
int id;
public IDSupport(int id) {
super();
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
public interface PriorityItf {
abstract int getPriority();
abstract void setPriority(int priority);
}
... (PrioritySupport class)
public interface ActivityItf {
abstract boolean isActive();
abstract void setActive(boolean active);
}
... (ActivitySupport class)
class Employee implements IDItf, PriorityItf, ActivityItf, Comparable<Header> {
private IDSupport idSupport;
private PrioritySupport prioritySupport;
private ActivitySupport activitySupport;
public Employee(int id) {
super();
idSupport = new IDSupport(id);
prioritySupport = new PrioritySupport(0);
activitySupport = new ActivitySupport(false);
}
@Override
public int compareTo(Header o) {
return Integer.compare(o.prioritySupport.getPriority(), prioritySupport.getPriority());
}
// Delegate methods (create them with Eclipse or other IDE's features)
public int getId() {
return idSupport.getId();
}
public void setId(int id) {
idSupport.setId(id);
}
...
}
...支持类相当简单,但如果它们需要更多的逻辑,它们就更有意义。 Employee
类中的字段可以使用 final
关键字。
我发现这篇作文过去很有帮助。拥有样板代码一开始感觉不太好。但是,委托(delegate)方法可以由 IDE 生成。支持类也可以大部分生成(创建字段,让 IDE 创建构造函数和 getter/setter)。缺点可能是生成的代码大幅减少,但仍需要维护。然而,从长远来看,我更喜欢更简单的代码,即使读起来很无聊。在过去的 25 年里,我不止一次地查看我不久前的代码,想知道我在想什么。有时,如果没有记录当时显而易见但现在却并非如此的关键提示,即使是注释也无济于事。
关于java - Java中无法多重继承的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833127/
我通过 spring ioc 编写了一些 Rest 应用程序。但我无法解决这个问题。这是我的异常(exception): org.springframework.beans.factory.BeanC
我对 TestNG、Spring 框架等完全陌生,我正在尝试使用注释 @Value通过 @Configuration 访问配置文件注释。 我在这里想要实现的目标是让控制台从配置文件中写出“hi”,通过
为此工作了几个小时。我完全被难住了。 这是 CS113 的实验室。 如果用户在程序(二进制计算器)结束时选择继续,我们需要使用 goto 语句来到达程序的顶部。 但是,我们还需要释放所有分配的内存。
我正在尝试使用 ffmpeg 库构建一个小的 C 程序。但是我什至无法使用 avformat_open_input() 打开音频文件设置检查错误代码的函数后,我得到以下输出: Error code:
使用 Spring Initializer 创建一个简单的 Spring boot。我只在可用选项下选择 DevTools。 创建项目后,无需对其进行任何更改,即可正常运行程序。 现在,当我尝试在项目
所以我只是在 Mac OS X 中通过 brew 安装了 qt。但是它无法链接它。当我尝试运行 brew link qt 或 brew link --overwrite qt 我得到以下信息: ton
我在提交和 pull 时遇到了问题:在提交的 IDE 中,我看到: warning not all local changes may be shown due to an error: unable
我跑 man gcc | grep "-L" 我明白了 Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more inf
我有一段代码,旨在接收任何 URL 并将其从网络上撕下来。到目前为止,它运行良好,直到有人给了它这个 URL: http://www.aspensurgical.com/static/images/a
在过去的 5 个小时里,我一直在尝试在我的服务器上设置 WireGuard,但在完成所有设置后,我无法 ping IP 或解析域。 下面是服务器配置 [Interface] Address = 10.
我正在尝试在 GitLab 中 fork 我的一个私有(private)项目,但是当我按下 fork 按钮时,我会收到以下信息: No available namespaces to fork the
我这里遇到了一些问题。我是 node.js 和 Rest API 的新手,但我正在尝试自学。我制作了 REST API,使用 MongoDB 与我的数据库进行通信,我使用 Postman 来测试我的路
下面的代码在控制台中给出以下消息: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child el
我正在尝试调用一个新端点来显示数据,我意识到在上一组有效的数据中,它在数据周围用一对额外的“[]”括号进行控制台,我认为这就是问题是,而新端点不会以我使用数据的方式产生它! 这是 NgFor 失败的原
我正在尝试将我的 Symfony2 应用程序部署到我的 Azure Web 应用程序,但遇到了一些麻烦。 推送到远程时,我在终端中收到以下消息 remote: Updating branch 'mas
Minikube已启动并正在运行,没有任何错误,但是我无法 curl IP。我在这里遵循:https://docs.traefik.io/user-guide/kubernetes/,似乎没有提到关闭
每当我尝试docker组成任何项目时,都会出现以下错误。 我尝试过有和没有sudo 我在这台机器上只有这个问题。我可以在Mac和Amazon WorkSpace上运行相同的容器。 (myslabs)
我正在尝试 pip install stanza 并收到此消息: ERROR: No matching distribution found for torch>=1.3.0 (from stanza
DNS 解析看起来不错,但我无法 ping 我的服务。可能是什么原因? 来自集群中的另一个 Pod: $ ping backend PING backend.default.svc.cluster.l
我正在使用Hibernate 4 + Spring MVC 4当我开始 Apache Tomcat Server 8我收到此错误: Error creating bean with name 'wel
我是一名优秀的程序员,十分优秀!