精华内容
下载资源
问答
  • Java方法 入参为接口Interface

    千次阅读 2016-10-26 22:35:20
    Java方法 入参为接口Interface今天研究Google官方的MVP框架模式,看到了一个方法,入参是两个Interface:这里写代码片自己写了个测试:public class Main { public static void main(String[] args) { //test 类 ...

    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中对象作为方法入参

    千次阅读 2017-08-23 13:57:39
    java中,对象作为方法入参时,如果传进去该对象已经new好了,那么可以在方法中为属性赋值。跳出方法后,赋值的属性会生效。 但是,如果传进去的对象是null,在方法中才new ,属性赋值等。这样,跳出方法后,...

    在java中,对象作为方法的入参时,如果传进去该对象已经new好了,那么可以在方法中为属性赋值。跳出方法后,赋值的属性会生效。

    但是,如果传进去的对象是null,在方法中才new ,为属性赋值等。这样,跳出方法后,对象还会是null。

    例子:

     

    public class WhtTest {
        public static void main( String[] args ) {
            List < String > list = null;
            getList( list );
            System.out.println( list ); // 输出null
        }
    
        private static void getList( List < String > list ) {
            list = new ArrayList < String >();
            list.add( "123" );
        }
    
    }
    

     

     

     

     

     

    展开全文
  • 可以是传数组,可变参数本质便是数组 public class Test1 { public static void main(String[] args) throws Exception{ String[] arr = new String[3]; arr[0] = "123"; arr[1] = "233";...

    可以是传数组,可变参数本质便是数组

    public class Test1 {
        public static void main(String[] args) throws Exception{
            String[] arr = new String[3];
            arr[0] = "123";
            arr[1] = "233";
            arr[2] = "443";
            print(arr);
        }
        public static void print(String ... args) {
            for (String arg : args) {
                System.out.println(arg);
            }
        }
    }
    

    展开全文
  • 介绍一款Java方法入参校验工具

    千次阅读 2019-01-06 17:14:17
    我基于这个需求便开发了这款工具,可以节省在这方面所花费的精力,通过配置的注解,在编译期对语法树进行修改,就能为方法加入参数的校验逻辑。 知道Lombok的同学肯定不少吧,其实原理都是一样的。 功能 现在所支持...

    介绍

    出发点

    在日常开发中经常需要对方法的入参做校验,特别是在远程调用的方法中。

    我基于这个需求便开发了这款工具,可以节省在这方面所花费的精力,通过配置的注解,在编译期对语法树进行修改,就能为方法加入参数的校验逻辑。

    知道Lombok的同学肯定不少吧,其实原理都是一样的。

    功能

    现在所支持的校验有数字、字符串、数组、集合和Map,并且能够在校验失败时选择是抛出异常或返回数据。

    下面让我们直接先看下使用效果吧。

    public class MyApp {
    
        @Throw
        public Info run(Args args,
                        @Nullable Info info,
                        @Return({"test", "0"}) @NotBlank String name,
                        @Return("null") @NumberRule(min = "1") int num) {
            // process
            System.out.println("run");
            return new Info();
        }
    }
    

    如上代码,经过编译后将会是这样的 :

    public class MyApp {
        public MyApp() {
        }
        public MyApp.Info run(MyApp.Args args, MyApp.Info info, String name, int num) {
            if (args == null) {
                throw new IllegalArgumentException("Invalid input parameter, cause args is null");
            } else {
                String mvar_0 = args.invalid0();
                if (mvar_0 != null) {
                    throw new IllegalArgumentException("Invalid input parameter, cause " + mvar_0);
                } else {
                    if (info != null) {
                        mvar_0 = info.invalid0();
                        if (mvar_0 != null) {
                            throw new IllegalArgumentException("Invalid input parameter, cause " + mvar_0);
                        }
                    }
    
                    if (name == null) {
                        return new MyApp.Info("test", (Double)null);
                    } else if (Util.isBlank(name)) {
                        return new MyApp.Info("test", (Double)null);
                    } else if (num < 1) {
                        return null;
                    } else {
                        System.out.println("run");
                        return new MyApp.Info();
                    }
                }
            }
        }
    }
    

    原始的逻辑 System.out.println("run"); new Info(); 被放置在了最后,当调用时参数校验都通过后才会执行。
    其实例子中的代码省略了对参数定义校验注解的部分,这些类在经过编译器后将会生成参数的校验方法。。。完整的代码如下

    public class MyApp {
    
        @Throw
        public Info run(Args args,
                        @Nullable Info info,
                        @Return({"test", "null"}) @NotBlank String name,
                        @Return("null") @NumberRule(min = "1") int num) {
            // process
            System.out.println("run");
            return new Info();
        }
    
        class Args {
    
            @NumberRule(max = "1000") int id;
    
            @NotNull HashMap<String, Object> param;
    
            @Nullable @SizeRule(min = 5) boolean[] value;
        }
    
        static class Info {
    
            @SizeRule(min = 50) String name;
    
            @Nullable @NumberRule(min = "-25.02", max = "200") Double price;
    
            @SizeRule(min = 10, max = 10) List<String> extra;
    
            public Info() {
            }
    
            Info(String name, Double price) {
                this.name = name;
                this.price = price;
            }
        }
    }
    

    其中的 ArgsInfo 在经过编译后将会根据定义的注解生成校验方法。

       static class Info {
           String name;
           Double price;
           List<String> extra;
    
           public Info() {
           }
    
           Info(String name, Double price) {
               this.name = name;
               this.price = price;
           }
    
           public String invalid0() {
               if (this.name == null) {
                   return "name is null";
               } else if (this.name.length() < 50) {
                   return "name.length() less than 50";
               } else if (this.price != null && this.price > 200.0D) {
                   return "price great than 200.0";
               } else if (this.extra == null) {
                   return "extra is null";
               } else {
                   return this.extra.size() != 10 ? "extra cannot equals 10" : null;
               }
           }
       }
    
       class Args {
           int id;
           HashMap<String, Object> param;
           boolean[] value;
    
           Args() {
           }
    
           public String invalid0() {
               if (this.value != null && this.value.length < 5) {
                   return "value.length less than 5";
               } else if (this.id > 1000) {
                   return "id great than 1000";
               } else {
                   return this.param == null ? "param is null" : null;
               }
           }
       }
    

    看到这儿,你应该对这个工具的基本功能有了大概的了解,下面我会介绍如果使用这个工具。

    使用说明

    1.添加依赖

    Maven

    <dependencies>
        <dependency>
            <groupId>io.github.moyada</groupId>
            <artifactId>medivh</artifactId>
            <version>1.2.0</version>
            <scope>provided</scope>
        </dependency>
    <dependencies/>
    

    Gradle

    dependencies {
      compileOnly 'io.github.moyada:medivh:1.2.0'
    }
    

    如果没有使用构建工具也没问题,可以从网上下载jar包,一样配置,在后面用 javac -cp 编译就好了。

    2. 配置注解

    现在可供使用的注解有这几种,支持以类、枚举、接口作为参数添加校验规则。

    注解 作用域 作用
    @NotNull 类字段、无参方法、方法参数 为对象类型的字段或返回值提供非空校验,默认定义了规则都会进行非空校验。
    @Nullable 类字段、无参方法、方法参数 不进行非空校验。
    @NotBlank 类字段、无参方法、方法参数 对 String 类型提供不可为空白字符串检测。
    @SizeRule 类字段、无参方法、方法参数 为 String 或 数组 或 集合 类型提供长度或大小校验。
    @NumberRule 类字段、无参方法、方法参数 为基础数字类型提供大小校验。
    @Throw 类、非静态方法、方法参数 指定参数校验失败时抛出异常。
    @Return 非静态方法、方法参数 指定参数校验失败时返回数据。
    @Exclusive 方法、方法参数 禁用校验逻辑。
    @Variable 非静态方法、类 修改当前作用域下校验逻辑产生的变量名和方法名。

    例如我需要提供一个判断String是否为null或空白字符串的方法。

    @Return("true")
    public boolean isEmpty(@NotBlank String str) {
        return false;
    }
    

    3. 编译项目

    使用构建工具的编译命令, 如 mvn compilegradle build

    或者使用 Java 命令进行编译,如 javac -cp medivh.jar MyApp.java

    如上述代码,经过编译期后,即可生成方法逻辑,并且创建一个 io.moyada.medivh.support.Util 类提供检验是否为空白字符串的方法,当然也支持自己指定方法。

    public boolean isEmpty(String str) {
        if (str == null) {
            return true;
        } else {
            return Util.isBlank(str);
        }
    }
    

    结尾

    看完这份介绍,如果有兴趣的同学还可以前往 github 查看,会有更详细的文档和示例,欢迎大家进行使用和提出意见。

    github.com/moyada/medivh

    展开全文
  • 将 wstring 类型 转换 jstring类型,供C++调用java参方法,传参时需要进行转换 下面进行我最重要的几步操作,就是类型转换的问题, // wstring 类型 std::watring&amp; callStr; //将 wstring 转换 ...
  • 提交了多少代码、提交了多少方法、有单元测试吗、影响了那些流程链路、有没有夹带上线。 大部分时候这些问题的汇总都是人为的方式进行提供,以依赖相信研发主。剩下的就需要依赖有经验的测试进行白盒验证。所以...
  • 1、拼接入参报文,调用方法,处理出参报文,格式化为list,通过@ResponseBody格式化为json输出前台。出参报文不同,处理方法不同,本文以我自己的出参报文例进行处理 @RequestMapping(value="/toData.do",method...
  • Java开发中业务层入参校验详细解析

    千次阅读 2018-12-25 09:41:16
    背景首先,我们达成以下共识:一个服务方法,如果入参太多,且基本非pojo,会给调用方造成不必要的干扰。尽管可以把文档写的很完善,但还是建议使用pojo对多个参数合理封装。 如下示例: @Data public class ...
  • Java的OutPutStream中有一个方法:write(int b) 文档里是这么解释的: 将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。 我...
  • public class Test { public static void main(String[] args) { User user = new User("ZhangSan"); //第一种写法 String username = user.getName(); userService.findUserByName...}
  • 在对外暴露接口时,如果以枚举作为入参,应该对调用者传入的字符串是否枚举类中的成员进行判断,可以在枚举类中增加一个contains方法进行校验: public static boolean containsKey(String key) { return ...
  • Java方法

    2020-10-03 16:04:19
    一、方法定义和使用 函数方法的作用是把相对独立的某个功能抽象出来,使之成为一个独立的实体 Java定义一个方法的格式: ...方法参数,也称为入参,为可选项,是指调用一个方法时可以传递的参数,可以是多个入参,也
  • 出错方法名 /(PS:算数运算符不知道能不能称之为方法..除法?),出错值 0; java.lang.ArithmeticException: / by zero at test.人.main(人.java:29) 这样. 如果我们把0/0改为0/1.在继续运行 100KG 0 java.lang....
  • Java方法重载

    2021-01-09 21:25:14
    但在很多场景中虽然是同一个动作,但是入参和变现可能会有差异。比如eat这种方法,可以有筷子、叉子、勺子,那么当工具不同的时候方法如何命名呢?除了通过方法名区分之外方法重载是一个很不错的方式。 2,多个构造...
  • Java中构造方法

    2020-10-25 15:25:58
    一, 方法的定义 类有一种特殊的成员方法叫做构造方法。 作用: 创建对象并初始化成...5.一个类中可也存在多个构造方法,不同方法之间通过入参类型和入参的个数来区分(重载)。 格式 public 类名称(参数类型 参数名) {
  • java方法参数传递

    2017-07-22 16:29:20
    某天听过了向天老师的课程之后抱着一点疑问,自己写了一点代码验证下。很小的一个知识点,却牵扯了java方法的传值方法,克隆,序列化一系列内容。...结论:java入参值传递,为何bean的属性发生了变化了。个人理解
  • Java---方法引用

    2020-04-17 15:48:21
    方法引用 方法引用可以被看作仅仅调用...如果你想使用一个方法引用,首先你只能函数式接口进行方法引用,其次,你要清楚的知道该函数式接口的唯一抽象方法入参以及出参的个数,接着,你就可以使用入参和出参 ...
  • java中定义泛型方法

    2020-10-14 10:24:22
    中声明后,就可以在方法入参中使用该类型。 泛型形参声明放在方法修饰符和方法返回值类型之间,定义格式如下: 修饰符 <T , S> 返回值类型 方法名(形参列表) { //方法体... } 如下面泛型方法定义的...
  • ibatis list 作入参的一些问题

    千次阅读 2012-12-03 10:50:16
    ibatis中list做回参很简单,resultClass设list中元素类型,dao层调用 Java代码 ...(List)getSqlMapClientTemplate().queryForList("sqlName", paraName);...做入参主要有两种方法一种是以list直接
  • [b]方法入参检测工具类,spring 提供的org.springframework.util.Assert:[/b] Assert 翻译中文“断言”,使用过 JUnit 的读者都熟知这个概念,它断定某一个实际的运行值和预期想一样,否则就抛出异常。Sp.....
  • 方法返回响应结果 eg:响应结果 String ss= “{“name”:1,“age”:23,“sex”:“女”,“class”:[“ming”:1,“li”:12]}” 将返回结果转换map格式 Map maps = (Map)JSON.parse(ss); 遍历map。返回需要...
  • java 特殊方法

    2018-02-08 16:03:00
    * 将请求入参中的 long类型日期转化 标准日期 * @param map * @param params */ public static void filterDateTypeJsonString(Map<String, Object> map,String ... params) { ...
  • 什么执行java类会自动执行main方法? 这是一个很有趣的问题: 代码:下面两种main函数写法均正确 public static void main(String[] args){} public static void main(String... args){} (可变参数从jdk1.5...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 434
精华内容 173
关键字:

java入参为方法

java 订阅