West Farm
吾本布衣,生于川北,躬耕于代码的田地上。
posts - 16,  comments - 15,  trackbacks - 0
天天冒出一堆新的东西!让人不知所措。

举个例子:jquery - angular - react - vue

这语言真的有毒。

如今的硬件,恐怕在浏览器中实现强类型语言JAVA来作为脚本语言都不比JS弱吧,哎真替applet感到冤枉。

老夫一直就觉得,浏览器一直是一个很奇葩的东西,HTML+CSS+JS本身,难道不能发明一种语言通过HTTP传输,然后直接调用OS级别的UI来渲染不就完了吗?

网页能实现的界面,我不信用操作系统的UI组件做不出来。
posted @ 2018-04-01 00:19 West Farmer 阅读(160) | 评论 (0)编辑 收藏
原文地址:https://weblogs.java.net/blog/pat/archive/2004/10/stupid_scanner_1.html

正则表达式中,\A是指一个字符串的开头,可能大家用惯了^,而忽略了这个\A, 但是^其实是指一行的开始,而不管一个字符串里面包含多少行,\A都只匹配第一行的开头。
那么我们可以用
\A做点什么呢?,看下面这个例子:
static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}
相信大家都看懂了,用\A作为分隔符,那么得到的当然就只有一个token,那就是整个字符串了。再配合Scanner,就轻易的将一个输入流转换为一个字符串了。
注意当需要做编码转换时,Scanner是有支持编码参数的构造方法的。
posted @ 2013-11-28 09:38 West Farmer 阅读(1004) | 评论 (0)编辑 收藏
     摘要: Gson is library created by google guys, it is used for java bean to json serialization/deserialization. Gson can serialize any java bean, collection, map to json, and don't need to care about the...  阅读全文
posted @ 2013-11-22 19:22 West Farmer 阅读(5308) | 评论 (3)编辑 收藏
If we observe a property of SWT controls, and bind it to another observable value, you must take care of those method calls which will change the property indirectly.
for example, we have a Combo whose "text" property is bound to a bean's "name" property like this:
IObservableValue nameObservable = BeansObservables.observeDetailValue(obserabedDriverProfile, "name", String.class);

ISWTObservableValue nameComboObservable = SWTObservables.observeText(driverClassCombo);

bindingContext.bindValue(nameComboObservable , nameObservable, new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE), null);

The variable "obserabedDriverProfile" is a observed selection in a ListViewer, it's in a master-detail scenario. If we add some code like this:
obserabedDriverProfile.addValueChangeListener(new IValueChangeListener(){

            @Override
            public void handleValueChange(ValueChangeEvent event) {
                DriverProfile dp = (DriverProfile)event.diff.getNewValue();
                driverClassCombo.removeAll();
                driverClassCombo.add(dp.getName();
                driverClassCombo.setText(driverClassCombo.getItem(0));
            }
            
        });
every time you change the selection in the ListViewer,  the selected bean's "name" property will be set to a empty string. Why?  The removeAll method of Combo will clear it's text, and combo's "text" property is bound to selected bean's "name" property. So, the right way is:
obserabedDriverProfile.addValueChangeListener(new IValueChangeListener(){

            @Override
            public void handleValueChange(ValueChangeEvent event) {
                DriverProfile dp = (DriverProfile)event.diff.getNewValue();
                String name = dp.getName;
                driverClassCombo.removeAll();
                driverClassCombo.add(name);
                driverClassCombo.setText(driverClassCombo.getItem(0));
            }
            
        });
posted @ 2013-04-14 15:24 West Farmer 阅读(245) | 评论 (0)编辑 收藏
本文用英文写的,主要是考虑到本文分享的内容即使在google上也搜索不到(至少我是没有搜索到)。

My English is at a very low level, don't care about this fact, just focus on the idea shared here.

The idea comes from the source code of ConfigurationElement which is located in package org.eclipse.core.internal.registry, If you read through the source code, you can also get it. But I found there is no documentation about this topic, so I wrote this.

Sometimes we need to contribute java class to a extension point. And we can use ConfigurationElement#
createExecutableExtension(String attributeName) to create an instance of it, if such a class is just a normal class, eclipse will  call class#newInstance(). But there is obvious restriction for using this approach, can't pass parameter in to create instance for example.

There are three different way how eclipse create instance of your class.

  1. normal, call class#newInstance()
  2. if your calss implements IExecutableExtension interface, IExecutableExtension#setInitializationData(IConfigurationElement config, String propertyName, Object data) will be called on the instance returned by class#newInstance()
  3. if your calss implements IExecutableExtensionFactory interface, IExecutableExtensionFactory#create() will be called

When you use the second method or the third method, you can pass in parameters, check the source code of ConfigurationElement, you will know how to do that. :D forgive me, I'm lazy. 
posted @ 2012-04-15 16:33 West Farmer 阅读(319) | 评论 (0)编辑 收藏

<2012年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿

随笔分类

随笔档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜