我正在尝试创建不同类型的生成器,每个生成器都将具有通用和唯一的方法,因此我正在尝试为其创建某种抽象,但我遇到了一个问题。
我的代码的一个示例是:
// The abstract with all the common methods
public abstract class AbstractBuilder {
public AbstractBuilder commonMethod() {
// implementation here
return this;
}
}
// Builder 1
public class MainBuilder extends AbstractBuilder {
public MainBuilder mainUniqueMethod() {
// implementation here
return this;
}
}
// Builder 2
public class SecondBuilder extends AbstractBuilder {
public SecondBuilder secondUniqueMethod() {
// implementation here
return this;
}
}
这个问题会出现在和建筑工人一起工作的时候,比方说我是这样做的
new MainBuilder().mainUniqueMethod().commonMethod(); // Possible
new MainBuilder().commonMethod().mainUniqueMethod(); // Impossible because commonMethod returns `AbstractBuilder`
因此,我找到的解决此问题的唯一方法是始终重写main方法,然后对main方法执行超级调用,如下所示:
@Override
public MainBuilder commonMethod() {
return (MainBuilder) super.commonMethod();
}
但如果常用的方法足够大,这可能会非常重复,也许这是一个糟糕的设计,但我想知道是否有一个更有效的方法来实现这一点。
您可以在此处使用泛型:
public abstract class AbstractBuilder<T extends AbstractBuilder<T>> {
public T commonMethod() {
// implementation here
return getThis();
}
@SuppressWarnings("unchecked")
protected T getThis() {
return (T)this;
}
}
class MainBuilder extends AbstractBuilder<MainBuilder> { ... }
这样,公共基类就可以“知道”实际返回什么子类型。getThis()
方法需要一个难看的强制转换,如果您使用类似Class SecondBuilder extends AbstractBuilder
之类的东西,该转换可能会中断,因此出现警告。所以要注意如何实现子类。
解决这一问题的一种方法是使getThis()
抽象并让每个子类实现它。
问题内容: 当其中的所有方法都是具体的时,有人在声明类抽象时有一些实际的编程情况吗? 问题答案: 好吧,您可能正在使用模板方法模式,其中存在多个都具有默认实现的覆盖点,但是组合的默认实现本身不合法-任何功能实现都必须是子类。 (是的,我不喜欢模板方法模式;)
所以,问题是:我有一个抽象基类(),它有一个抽象成员方法()。方法返回布尔值,并应检查是否相等,但“相等”在子类中可能有不同的解释,因此我不重写或。因为它测试是否与另一个与其类型相同的对象相等,所以签名如下所示: 现在,当我试图在类中重写它时,假设“”,我不能使用作为参数的类型。我知道一般情况下这样做的原因和添加类型界限的建议,但是事情变得更加复杂,因为参数类型是它自己的类。 有没有什么平滑的方法
所以我试图扩展一个employee抽象类。代码如下: 现在,正如您所看到的,我已经在两个子类中遍历了抽象方法getFeedback。但我得到了这个错误: 那么问题是什么呢?为什么在两个子类中都编写了getFeedback方法,却引发了这个错误
为什么我从下面的代码中得到这个编译错误消息? (程序根据键盘上按下的箭头键,在4个方向上移动箭头:d) Direction.java:41:错误:DirectionBoard。DirectionListener不是抽象的,并且不会覆盖KeyListener中的抽象方法keyReleated(KeyEvent)
大家好,我有这个主课堂 错误:(42,8)错误:Home不是抽象的,并且不会覆盖OnFragmentInteractionListener中的onFragmentInteract(String)抽象方法 我创建了一个导航抽屉,并希望有一个新的片段来显示另一个家庭活动的内容。 Android Studio告诉我做个家。类抽象或实现抽象方法。 里面: 我那样做了,但是什么也没有改变。我不能让home类
在一个具有(控制器-服务-DAO-实体层)的spring hibernate Java项目中,我使用了抽象工厂模式(抽象类有2个抽象方法)。在实现的抽象工厂模式类中,我有dao方法(运行命名查询)。现在,当请求到达来自另一个服务类的dao的服务impl时,它给出了空指针删除,我已经在服务impl中自动连线了dao类` 我不能将@Service(“AbstractFruitService”)添加到S