【发布时间】:2018-06-15 05:37:07
【问题描述】:
是否可以将这种使用接口和继承的 Java 结构重写为惯用的 Golang 方式?
这不是超级复杂的Java代码,但它显示了类继承的力量,但我想尝试在Go中以某种方式达到同样的结果
Java 代码:
首先有一个类接口。
public interface WebEntry {
String perform(ConnectionData connectionData, SessionData sessionData) throws Exception;
}
某处有一个网络条目列表WebEntry:
List<WebEntry> webEntries = new ArrayList<>();
webEntries.add( new SavePasswordWebEntry() );
实现WebEntry的抽象类UserLoggedInWebEntry
public abstract class UserLoggedInWebEntry implements WebEntry {
@Override
public String perform(ConnectionData connectionData, SessionData sessionData) throws Exception {
// THIS IS THE LOGIC I DO NOT WANT TO DUPLICATE, HENCE ITS USING CLASS INHERITANCE
...
return userPerform(User user);
}
protected abstract String userPerform(User user) throws Exception;
}
通过使用类继承,我们可以创建一个UserLoggedInWebEntry,它的行为仍然与WebEntry 一样,但我们不需要在每次我们想要一个“用户登录网络条目”实例时重复... 逻辑:
public class SavePasswordWebEntry extends UserLoggedInWebEntry {
@Override
protected String userPerform(User user) throws Exception {
...
}
}
所以重点是,由于它使用类继承,开发人员只需要实现String userPerform(User user),而无需在UserLoggedInWebEntry中复制...的逻辑。
这甚至可以在 Golang 中实现吗?如果有,会是什么样子?
【问题讨论】:
-
重建什么?像任何 Java 代码一样乱七八糟?是的,你也可以在 Go 中做一些愚蠢的事情。关于 Go 代码的实际问题是什么?
-
就像我在问题中所说的那样:> 但是,通过创建一个抽象类 UserLoggedInWebEntry,开发人员可以轻松创建仅实现具有签名保护的 String userPerform(User user) 的方法的 Web 条目,而无需复制UserLoggedInWebEntry.perform(...) 中的 ... 逻辑。通过这里使用类继承,开发不需要重复发生在
UserLoggedInWebEntry中的“...”逻辑 -
这是我的问题。我如何在 Golang 中实现同样的目标?这甚至可能吗?如果是这样,如何
-
“刚学 Go”——这就是……我正在尝试……通过在 Stackoveflow 上提出这个问题来做。如果我知道 Go 正确以及如何实现相同的目标,我就不会在这里问它。
-
主要建议是:停止在 Go 中重新创建 Java 模式。你会伤害自己。把它留在后面。你做不到,你也不会成功。不要问“我如何在 Go 中做 Java 的模式 X”。抱歉,如果我不清楚。
标签: java inheritance go