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