当前位置: 首页 > 知识库问答 >
问题:

允许实现指定参数列表的Java接口

徐兴昌
2023-03-14

我有一个例子,我想实现一个建议服务。这应该是一个服务,用户可以调用它来检索某些已定义字段的提示性值。比如说我想要一个关于汽车和手机的建议。这些字段是固定的,因此我可以在服务的接口中为每个字段硬编码一个方法。

public interface SuggestionService {
    SuggestionResult getCarSuggestion(final SuggestionCriteria criteria);
    SuggestionResult getMobilephoneSuggestion(final SuggestionCriteria criteria);
}
public class SuggestionServiceImpl implements SuggestionService {
    public CarSuggestionResult getCarSuggestion(final SuggestionCriteria criteria) {...}
    public MobilephoneSuggestionResult getMobilephoneSuggestion(final SuggestionCriteria criteria) {...}
}

问题是我无法更改参数类型。如果我在SuggestionServiceImpl中这样做

public CarSuggestionResult getCarSuggestion(final CarSuggestionCriteria criteria) {...}

然后我得到一个编译错误。这是有意义的,因为我现在已经通过减少允许的参数类型的数量来缩小我试图实现的接口。出于充分的理由,这是不允许的。

但是,我认为SuggestionServiceImpl应该能够告诉用户它实际上需要什么html" target="_blank">参数--通过在它的方法签名中指定这些参数。这里有一个奇怪的利益冲突,我想不出解决这个问题的办法。一方面,我想编写和使用一个实际实现需要实现的接口。通过这种方式,我可以确保所有实现都提供了检索我感兴趣的字段的方法--在本例中是car和MobilePhone。但是,implementations接口应该能够准确地告诉用户它需要什么类型的参数,并且不接受任何一般的参数列表,让用户传递正确的参数。有没有办法把这两种欲望结合起来?

共有1个答案

汪志业
2023-03-14

签名仍然是一个接口,当它们不是时,没有要求它们都被同质化成类似的外观调用。

public interface CarSuggester {
    Car getCarSuggestion(String param1);
}

public interface PhoneSuggester {
    List<Phone> getPhoneSuggestion(int param1, String param2);
}

public class SuggestionService implements CarSuggester, PhoneSuggester {
    ...
}

让我们用一个简单的Facade模式保留(并测试)离散的暗示器,将它们组合成一个单独的impl(如果您也需要离散的impl,这取决于您--建议这可能是明智的)

 类似资料:
  • 我正在处理一个电话号码正则表达式,这是我到目前为止所拥有的: 它允许0到9之间的数字,也允许''和空白。范围必须在8到20之间。这工作罚款。 我想进一步得到的是,只有8到20个数字,其中“”和空格是分开的。 类似这样的内容: 建议?

  • 我一直在捕捉非数字时遇到问题。 我试过了,但抓不住。如果我让它捕获非数字,但不让用户再次尝试输入。。。它完全停止了我的代码。 这是我的密码:

  • 问题内容: 但是那里给出的解决方案不起作用。他们说我需要采取以下行动: 在项目结构中| 在“项目”对话框中,在界面中将“项目语言级别”更改为6.0-@Override。 但是,目前项目语言级别是6.0,但是我仍然看到错误。 维克(Vic),这是一个窗口,并且在语言级(Language level)下没有JVM版本(不幸的是,由于我有10个信誉,所以我无法发布图像) 问题答案: 如果您的项目有多个模

  • 我有一个程序有很多数据对象。每种方法都实现了可比性,并设置为从最高到最低(基于简单的长值)排序,包括重复的值。我希望这些对象存储在一个集合/列表中,这样我就可以遍历它,并在其各自的位置取出每个对象。 我已经研究过使用树集,但是这不允许重复,因此只保留具有相同值的多个对象中的一个。然后我找到了TreeMultiset,它可以保持元素具有相同的值。唯一的问题是,它只是存储同一对象的副本,而不是多个相等

  • 因此,我在Rails中的模型的ElasticSearch关注中有以下模块。 这是有效的,但是如何使每个bool查询(must、must_not、filter)接受或空参数呢? 假设我传递一个空的,它将获得所有文档。然后,当我传递一个空的参数时,它将返回所有大小。