Java方法 入参为接口Interface

本文探讨了Google官方MVP框架中,一个方法接收两个接口作为参数的场景。TasksRepository和TasksContract.View分别是接口,通过具体实现类 Injection.provideTasksRepository(getApplicationContext())和tasksFragment(TasksContract.View的实现)进行实例化调用。测试结果显示接口参数的使用清晰易懂。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java方法 入参为接口Interface

今天研究Google官方的MVP框架模式,看到了一个方法,入参是两个Interface

public class TasksPresenter implements TasksContract.Presenter {

    private final TasksRepository mTasksRepository;

    private final TasksContract.View mTasksView;

    public TasksPresenter(@NonNull TasksRepository tasksRepository, @NonNull TasksContract.View tasksView) {
        mTasksRepository = checkNotNull(tasksRepository, "tasksRepository cannot be null");
        mTasksView = checkNotNull(tasksView, "tasksView cannot be null!");

        mTasksView.setPresenter(this);
    }

..........

TasksRepositoryTasksContract.View 是两个接口,调用该构造方法为:

mTasksPresenter = new TasksPresenter(
                Injection.provideTasksRepository(getApplicationContext()), tasksFragment);

Injection.provideTasksRepository(getApplicationContext())TasksRepository 的一个实现类;
tasksFragmentTasksContract.View 的一个实现类。

自己写了个测试:

public class Main {

    public static void main(String[] args) {
        //test 类
        Test test = new Test();
        //class1 类, 实现了Inter接口
        Class1 class1 = new Class1();
        //class2 类, 实现了Inter接口
        Class2 class2 = new Class2();
        //调用getTest()方法
        test.getTest(class1);
        System.out.println("<----------->");
        //调用getTest()方法
        test.getTest(class2);
    }

    //Inter接口
    private interface Inter{
        public void output();
    }

    //Class1类 实现Inter接口
    static class Class1 implements Inter{
        @Override
        public void output() {
            System.out.println("this is Class1");
        }
    }

    //Class2类 实现Inter接口
    static class Class2 implements Inter{
        @Override
        public void output() {
            System.out.println("this is Class2");
        }
    }

    //Test类 参数为Inter接口
    static class Test{
        public void getTest(Inter inter){
            inter.output();
        }
    }
}

输出为:

this is Class1
<----------->
this is Class2

Process finished with exit code 0

一切明了。

### Java接口中的数传递方式与定义方法Java中,接口是一种抽象类型,可以用来定义行为规范。通过接口数传递机制,可以在实现类中具体化这些行为并完成实际操作。以下是关于如何定义和使用Java接口中的的相关说明。 #### 定义接口方法签名 接口中的方法默认是`public abstract`类型的,这意味着它们不需要显式声明访问修饰符或`abstract`关键字。当定义带有数的方法时,可以通过以下方式进行: ```java public interface MyInterface { void performAction(String param); // 带有String类型数的方法 } ``` 上述代码展示了如何在一个接口中定义带有一个字符串数的方法[^1]。 #### 使用泛型增强灵活性 为了使接口更加通用,可以引泛型来支持多种数据类型的处理。例如: ```java public interface GenericInterface<T> { T processInput(T input); } ``` 在这个例子中,`GenericInterface`是一个泛型接口,允许其实现者根据需求指定具体的类型数。 即使未提供明确的类型实,在运行时也会被替换为Object作为默认值。 #### 数校验的重要性 对于复杂的业务逻辑或者外部调用场景(如Web服务),对接收到的数据进行有效性验证是非常重要的一步。这通常涉及对输字段是否存在以及其格式是否合法等问题做出判断[^4]。 一种常见的做法是在方法内部手动编写if语句来进行初步筛查;另一种更为现代化的方式则是利用自定义注解配合AOP技术自动完成这一过程。 #### 跨语言兼容性的考虑 考虑到可能存在多语言交互的情况(比如前后端分离架构下的前端JavaScript/TypeScript应用同后端Spring Boot构建的服务通信),建议采用统一的标准表示形式以便于不同平台间相互理解彼此发送过来的信息结构[^3]。 例如,在设计API响应体时尽量避免直接暴露数据库表名映射关系而是创建专门用于传输展示层所需属性的新POJO类实例填充必要信息后再返回给客户端消费。 此外还应注意命名风格的一致性问题,推荐遵循全小写字母加下划线分隔单词的方式来表达复合含义的概念名称。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值