• 【死磕jeestie源码】类型后面三个点(String...)和数组(String[])的区别


    类型后面三个点(String...),是从Java 5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟...,表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]。 例如我们有一个方法叫做test(String...strings),那么你还可以写方法test(),但你不能写test(String[] strings),这样会出编译错误,系统提示出现重复的方法。 

    在使用的时候,对于test(String...strings),你可以直接用test()去调用,标示没有参数,也可以用去test("aaa"),也可以用test(new String[]{"aaa","bbb"})。 

    另外如果既有test(String...strings)函数,又有test()函数,我们在调用test()时,会优先使用test()函数。只有当没有test()函数式,我们调用test(),程序才会走test(String...strings)。 

    public class Test003 {    
          
        private Test003(){    
            test();    
            test(new String[]{"aaa","bbb"});    
            test("ccc");    
        }    
            
        private void test(){    
            System.out.println("test");     
        }    
            
        private void test(String...strings){    
            for(String str:strings){    
                System.out.print(str + ", ");    
            }    
            System.out.println();    
        }    
            
        /*private void test(String[] strings){  
            System.out.println(3);  
              
        }*/    
            
        public static void main(String[] args) {    
            new Test003();    
        }    
        
    }  

    jeestie框架中加载properties文件的源码:

    /**
     * Copyright (c) 2005-2011 springside.org.cn
     * 
     * $Id: PropertiesLoader.java 1690 2012-02-22 13:42:00Z calvinxiu $
     */
    package com.thinkgem.jeesite.common.utils;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Map;
    import java.util.NoSuchElementException;
    import java.util.Properties;
    
    import org.apache.commons.io.IOUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.core.io.DefaultResourceLoader;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.ResourceLoader;
    
    import com.google.common.collect.Maps;
    
    /**
     * Properties文件载入工具类. 可载入多个properties文件, 相同的属性在最后载入的文件中的值将会覆盖之前的值,但以System的Property优先.
     * @author calvin
     * @version 2013-05-15
     */
    public class PropertiesLoader {
    
        private static Logger logger = LoggerFactory.getLogger(PropertiesLoader.class);
    
        private static ResourceLoader resourceLoader = new DefaultResourceLoader();
    
        private final Properties properties;
    
        public PropertiesLoader(String... resourcesPaths) {
            properties = loadProperties(resourcesPaths);
        }
    
        public Properties getProperties() {
            return properties;
        }
    
        /**
         * 取出Property,但以System的Property优先,取不到返回空字符串.
         */
        private String getValue(String key) {
            String systemProperty = System.getProperty(key);
            if (systemProperty != null) {
                return systemProperty;
            }
            if (properties.containsKey(key)) {
                return properties.getProperty(key);
            }
            return "";
        }
    
        /**
         * 取出String类型的Property,但以System的Property优先,如果都为Null则抛出异常.
         */
        public String getProperty(String key) {
            String value = getValue(key);
            if (value == null) {
                throw new NoSuchElementException();
            }
            return value;
        }
    
        /**
         * 取出String类型的Property,但以System的Property优先.如果都为Null则返回Default值.
         */
        public String getProperty(String key, String defaultValue) {
            String value = getValue(key);
            return value != null ? value : defaultValue;
        }
    
        /**
         * 取出Integer类型的Property,但以System的Property优先.如果都为Null或内容错误则抛出异常.
         */
        public Integer getInteger(String key) {
            String value = getValue(key);
            if (value == null) {
                throw new NoSuchElementException();
            }
            return Integer.valueOf(value);
        }
    
        /**
         * 取出Integer类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容错误则抛出异常
         */
        public Integer getInteger(String key, Integer defaultValue) {
            String value = getValue(key);
            return value != null ? Integer.valueOf(value) : defaultValue;
        }
    
        /**
         * 取出Double类型的Property,但以System的Property优先.如果都为Null或内容错误则抛出异常.
         */
        public Double getDouble(String key) {
            String value = getValue(key);
            if (value == null) {
                throw new NoSuchElementException();
            }
            return Double.valueOf(value);
        }
    
        /**
         * 取出Double类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容错误则抛出异常
         */
        public Double getDouble(String key, Integer defaultValue) {
            String value = getValue(key);
            return value != null ? Double.valueOf(value) : defaultValue;
        }
    
        /**
         * 取出Boolean类型的Property,但以System的Property优先.如果都为Null抛出异常,如果内容不是true/false则返回false.
         */
        public Boolean getBoolean(String key) {
            String value = getValue(key);
            if (value == null) {
                throw new NoSuchElementException();
            }
            return Boolean.valueOf(value);
        }
    
        /**
         * 取出Boolean类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容不为true/false则返回false.
         */
        public Boolean getBoolean(String key, boolean defaultValue) {
            String value = getValue(key);
            return value != null ? Boolean.valueOf(value) : defaultValue;
        }
    
        /**
         * 载入多个文件, 文件路径使用Spring Resource格式.
         */
        private Properties loadProperties(String... resourcesPaths) {
            Properties props = new Properties();
    
            for (String location : resourcesPaths) {
    
    //            logger.debug("Loading properties file from:" + location);
    
                InputStream is = null;
                try {
                    Resource resource = resourceLoader.getResource(location);
                    is = resource.getInputStream();
                    props.load(is);
                } catch (IOException ex) {
                    logger.info("Could not load properties from path:" + location + ", " + ex.getMessage());
                } finally {
                    IOUtils.closeQuietly(is);
                }
            }
            return props;
        }
                
        
        public static void main(String[] args) {
            Map<String, String> map = Maps.newHashMap();
            PropertiesLoader loader=new PropertiesLoader("jeesite.properties");
            String key="adminPath";
            String value = map.get(key);
            if (value == null){
                value = loader.getProperty(key);
                map.put(key, value != null ? value : StringUtils.EMPTY);
            }
            System.out.println(value);
        }
    }
    View Code
  • 相关阅读:
    1022 D进制的A+B
    1021 个位数统计
    L1-040 最佳情侣身高差
    Celery--基本使用
    Celery--安装
    Celery--简介
    RabbitMQ--常用命令
    RabbitMQ--RPC实现
    RabbitMQ发布订阅
    RabbitMQ基本使用
  • 原文地址:https://www.cnblogs.com/abc8023/p/6322289.html
Copyright © 2020-2023  润新知