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

一个类是否有可能通过使用接口引用来访问另一个类的方法?


假设,我有一个类,loginUIController.java我想从这个类访问另一个类的方法mainController.java。但我不会直接访问该方法。对于访问方法,mainController.java我将使用其接口mainController.java是InferfaceMainController.java。


以下课程是:-


这里是 loginUIController.java


public 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?


UYOU
浏览 203回答 4
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引用的依赖注入示例。

慕哥6287543

你做这件事的方式并没有什么区别。这真的是你的手柄。InterfaceMainController foo = new MainController();foo.checkLogin("me", "my password");您可以将 foo 传递给任何需要 InterfaceMainController 的方法。但代码在其他方面看起来相同。只是变量类型发生了变化。

墨色风雨

从代码片段来看,您似乎缺少一个实现接口的对象InterfaceMainController(在您的示例中,这将是 的实例MainController)。我可以想到两个选项来解决这个问题:将对象传递给 LoginUIController 的构造函数。使用控制反转 (IOC) / 依赖注入。选项#1 就目前而言是可以的,但在这种方法中,您将负责对象生命周期和所有权。选项#2 不是 Java 语言功能,而是框架提供的功能,例如Spring。

扬帆大鱼

是的,可以将MainControllerobj传递给InterfaceMainController引用变量。没有春天InterfaceMainController mainController = new MainController();使用 Spring 注解如果您使用的是弹簧,那么您可以使用注释来自动连接MainController对象@component以及@Autowired 类似的东西@Component  public class MainController implements InterfaceMainController {  ........}和经销商的线mainController与注解@Autowired这样@Autowired  InterfaceMainController mainController
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java