java.text.messageformat.format会影响效率吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.text.messageformat.format会影响效率吗相关的知识,希望对你有一定的参考价值。

这个坑,就出现在下面这个api的使用
java.text.MessageFormat.format(String pattern,java.lang.Object... arguments);

先来个正常的:
上代码

Code:

package chapter5;
import java.text.MessageFormat;
public class MessageFormatDemo
public static void main(String[] args)
String pattern = "select * from staff where salary>0 and age>1";
String result = MessageFormat.format(pattern, 100, 20);
System.out.println(result);



执行下看看结果是不是:
select * from staff where salary>100 and age>20

Output:

select * from staff where salary>100 and age>20

与预期一致
OK

现在什么物价啊,salary大于100的太多了(木有少于100的好不好)

改下,要查工资大于50 000的

Code:

String result = MessageFormat.format(pattern, 50000, 20);

执行下看看结果:

select * from staff where salary>50,000 and age>20

看到没
50000变成50,000

这到数据库中肯定是不行啊
为什么出现这种情况呢

扒扒源码

java.text.MessageFormat.java的
subformat(Object[] arguments,StringBuffer result,FieldPosition fp,List characterIterators)
方法中有对输入Object数据进行格式化的逻辑

else if (obj instanceof Number)
// format number if can
subFormatter = NumberFormat.getInstance(locale);
else if (obj instanceof Date)
// format a Date if can
subFormatter = DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT, locale);//fix

else if (obj instanceof String)
arg = (String) obj;

把格式化Number的这段代码摘出来,

Format subFormatter = NumberFormat.getInstance(Locale.getDefault());
System.out.println(subFormatter.format(1000));
subFormatter = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault());//fix
System.out.println(subFormatter.format(new Date()));

执行下看看

Output:

1,000

16-4-7 上午12:40

输出结果与预期一致,果然多了个逗号

细心的tx已经看到了,日期类型也不行,一样会格式的哦

7
如果还想使用MessageFormat应该怎么处理呢?
在上面的源码中,可以看到,在格式化时,String类型是不处理的

只要把arguments的参数改为String就可以了

Code:

String result = MessageFormat.format(pattern, "50000", 20);
参考技术A 增加处理过程,肯定是会影响,只是看是否值得

~
参考技术B 可以在语句前后加上毫秒/微秒/时间差来计算效率。

Ant Design Vue 中 modal 利用 $refs 简单使用

Ant Design Vue 中 modal 利用 $refs  简单使用

主要使用到   this.$refs.closeBtnModal.initShow(); 避免了父组件传值,再使用this.$emit() 的繁琐步骤,

这样可以在子组件中控制modal打开和关闭,不需要在父组件中写代码处理

 

01) 父组件

技术图片
<template>
    <div>
        <a-button @click="showModal">show modal</a-button>
        <login-close-btn  ref="closeBtnModal" style="margin-left: 10px;">我是组件</login-close-btn>
    </div>
</template>
<script>

    /* 这是ant-design-vue */
    import Vue from vue
    import Antd, { message,Select } from ant-design-vue  //这是ant-design-vue
    import ant-design-vue/dist/antd.css
    Vue.use(Antd);
    /* 这是ant-design-vue */

    import loginCloseBtn from ../../components/close-btn.vue
    
    export default {
        components:{loginCloseBtn},
        data() {
            return {}
        },
        methods: {
            showModal() {
                this.$nextTick(()=>{
                    this.$refs.closeBtnModal.initShow();  // 这种方式,直接去子组件中控制modal打开和关闭
                })
            }
        },
    };
</script>

<style scoped>

</style>
View Code

02) 子组件

技术图片
<template>
    <div>
        <a-modal title="我是title" :visible=sureVisible  @ok="handleOk" @cancel="handleCancel">
            我是组件modal
        </a-modal>
    </div>
</template>

<script>
    export default {
        name: "close-btn",
        data(){
            return{
                sureVisible:false
            }
        },
        methods:{
            initShow(){
                this.sureVisible=true
            },
            handleCancel(){
                this.sureVisible=false
            },
            handleOk(e) {
                this.sureVisible = false;
            },
        }
    }
</script>

<style scoped>

</style>
View Code

 

技术图片

 

以上是关于java.text.messageformat.format会影响效率吗的主要内容,如果未能解决你的问题,请参考以下文章