gpt4 book ai didi

java - Java中接口(interface)实现的方法调用分离,也许使用Spring

转载 作者:行者123 更新时间:2023-12-01 23:54:39 24 4
gpt4 key购买 nike

我有一个这样的界面:

public interface ISmsService {
//method for vendor A
String sendSms();

//method for vendorB
int sendSms(String loginid);
}

该接口(interface)描述了两个供应商的重载方法。

我有一个像这样的供应商 A 实现:

public class VendorAService implements ISmsService{

@Override
public String sendSms() {
return "send msg via vendor A";
}

//I want to restrict the usage of this method for vendor B instance at compile time
@Override
public int sendSms(String loginid) {
//I can throw an exception but I do not want to restrict it at runtime.
return 0;
}

}

供应商 B 的实现如下:

public class VendorBService implements ISmsService{

//I want to restrict the usage of this method for vendor A instance at compile time
@Override
public String sendSms() {
//I can throw an exception but I do not want to restrict it at runtime
return null;
}

@Override
public int sendSms(String loginid) {
return 1000;
}

}

我的实现类是这样的:

public class User {


public static void main(String[] args) {
ISmsService smsService = new VendorAService();
smsService.sendSms("12345"); // I want thiş line gives a compile time error. I want only a vendorB type can call this method.

smsService = new VendorBService();
smsService.sendSms(); //Same here. I just want vendorA type can call sendSms method without a String parameter
}

}

正如我在注释行中所描述的,我想指定供应商实例只能调用特定的方法。我可以在运行时抛出异常,例如错误的供应商调用。但如果可能的话,我想限制编译时的行为。

有人遇到过这样的问题吗?

spring有解决这个问题的方法吗?

提前致谢

最佳答案

如果您不希望用户能够调用错误的方法,并且希望编译器为您进行检查,解决方案非常简单:完全删除接口(interface) ISmsService 。就您而言,它根本没有帮助,引入了附带的复杂性,而不为您提供任何简化作为返回。界面的用户需要不断区分供应商,即使他们得到的界面据称可以消除差异。

如果你想获得接口(interface)的好处,你应该以某种方式统一这两个方法,让用户调用接口(interface)方法而不用考虑背后是哪个供应商。例如,您可以这样做:

class SmsParameters {
... // Add methods to set parameters, in some non-restrictive way.
... // In particular, users should be able to pass login parameters through it
}

class SmsReturn {
... // Add methods to harvest the return value, e.g. as an Object
}

interface ISmsService {
SmsReturn sendSms(SmsParameters args);
}

编译器在将供应商与调用者匹配方面无能为力,但至少调用者只能调用一种方法。

关于java - Java中接口(interface)实现的方法调用分离,也许使用Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20018722/

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