为了账号安全,请及时绑定邮箱和手机立即绑定

通过在java中创建对象来引用接口

通过在java中创建对象来引用接口

UYOU 2021-12-10 14:59:34
一个类是否有可能通过使用接口引用来访问另一个类的方法?假设,我有一个类,loginUIController.java我想从这个类访问另一个类的方法mainController.java。但我不会直接访问该方法。对于访问方法,mainController.java我将使用其接口mainController.java是InferfaceMainController.java。以下课程是:-这里是 loginUIController.javapublic class LoginUIController{       InterfaceMainController mainController = null;  private void handleButtonAction(ActionEvent event) throws IOException   {       String userid = txt_username.getText();       String password = txt_password.getText();       mainController.checkLogin(userid, password);     }}接口主控制器:-public interface InterfaceMainController {    void checkLogin(String userid, String password);    void addContact(String name, String phone, String address, String email);  }主控制器:-public class MainController implements InterfaceMainController{    @Override    public void checkLogin(String userid, String password){        Users u = new Users();        u.setUserid(userid);        u.setPassword(password);        DBLayer db1 = new DBLayer();        try         {          if(db1.userExists(u))          {              System.out.println("login Success.");          }          else          {              System.out.println("login Failed.");          }        } catch (Exception ex) {            e.printStackTrace();        }    }}现在,如何访问checkLogin(String userid, String password);的mainController.java从loginUIController.java通过创建的接口对象InterfaceMainController.java?
查看完整描述

4 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

从 的角度来看LoginUIController,没有这样的事情MainController。LoginUIController只知道大概InterfaceMainController。这基本上就是您在以下内容中定义的内容:


InterfaceMainController mainController = null;

要使用InterfaceMainController您的实例,首先需要接口的实现,在您的情况下是MainController. 然后,您创建一个实现实例:


InterfaceMainController mainController = new MainController();

最后,在您的情况下,您需要将实例提供给任何需要它的人LoginUIController。一种常见的方法是创建一个构造函数,如下所示:


public class LoginUIController

{

    InterfaceMainController mainController = null;


    public LoginUIController(InterfaceMainController mainController) {

        this.mainController = mainController

    }  

    ...

}

以上是Elliot引用的依赖注入示例。


查看完整回答
反对 回复 2021-12-10
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

你做这件事的方式并没有什么区别。这真的是你的手柄。


InterfaceMainController foo = new MainController();


foo.checkLogin("me", "my password");

您可以将 foo 传递给任何需要 InterfaceMainController 的方法。但代码在其他方面看起来相同。只是变量类型发生了变化。


查看完整回答
反对 回复 2021-12-10
?
墨色风雨

TA贡献1853条经验 获得超6个赞

从代码片段来看,您似乎缺少一个实现接口的对象InterfaceMainController(在您的示例中,这将是 的实例MainController)。我可以想到两个选项来解决这个问题:

  1. 将对象传递给 LoginUIController 的构造函数。

  2. 使用控制反转 (IOC) / 依赖注入。

选项#1 就目前而言是可以的,但在这种方法中,您将负责对象生命周期和所有权。选项#2 不是 Java 语言功能,而是框架提供的功能,例如Spring


查看完整回答
反对 回复 2021-12-10
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

是的,可以将MainControllerobj传递给InterfaceMainController引用变量。


没有春天


InterfaceMainController mainController = new MainController();

使用 Spring 注解


如果您使用的是弹簧,那么您可以使用注释来自动连接MainController对象@component以及@Autowired 类似的东西


@Component  

public class MainController implements InterfaceMainController {

  ........

}

和经销商的线mainController与注解@Autowired这样


@Autowired  

InterfaceMainController mainController


查看完整回答
反对 回复 2021-12-10
  • 4 回答
  • 0 关注
  • 202 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信