您可以在Eclipse中创建各种Java代码模板
窗口>首选项> Java >编辑器>模板
e.g.
Sysout扩展为:
System.out.println(${word_selection}${});${cursor}
您可以通过输入sysout加上CTRL+SPACE来激活它
您目前使用哪些有用的Java代码模板?包括它的名称和描述,以及为什么它很棒。
我正在寻找一个模板的原始/新颖的使用,而不是一个内置的现有功能。
创建Log4J日志记录器
从显示中获取swt颜色
Syncexec - Eclipse框架
单例模式/Enum单例生成
Readfile
常量
Traceout
格式字符串
注释代码审查
字符串格式
尝试最终锁定
消息格式i18n和log
Equalsbuilder
Hashcodebuilder
Spring对象注入
创建FileOutputStream
我使用以下模板进行Android开发:
详细(日志)
Log.v(TAG, ${word_selection}${});${cursor}
调试(Logd)
Log.d(TAG, ${word_selection}${});${cursor}
(信息的人类学)
Log.i(TAG, ${word_selection}${});${cursor}
Warn (Logw)
Log.w(TAG, ${word_selection}${});${cursor}
错误(包厢)
Log.e(TAG, ${word_selection}${});${cursor}
Assert (Loga)
Log.a(TAG, ${word_selection}${});${cursor}
TAG是我在每个活动中定义的常量。
以下代码模板将创建记录器,并根据需要创建正确的导入。
SLF4J
${:import(org.slf4j.Logger,org.slf4j.LoggerFactory)}
private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);
Log4J 2
${:import(org.apache.logging.log4j.LogManager,org.apache.logging.log4j.Logger)}
private static final Logger LOG = LogManager.getLogger(${enclosing_type}.class);
Log4J
${:import(org.apache.log4j.Logger)}
private static final Logger LOG = Logger.getLogger(${enclosing_type}.class);
源。
JUL
${:import(java.util.logging.Logger)}
private static final Logger LOG = Logger.getLogger(${enclosing_type}.class.getName());
我刚刚注意到@邓肯琼斯已经有这个模板,但添加${line_selection}和使用Shift + Alt + Z是一个有用的策略。
这可能只是我正在从事的项目中一些糟糕设计的一点hack fix,但我有很多情况下,一些遗留代码正在修改AWT线程之外的Swing组件,并导致间歇性错误,所以为了快速修补这些问题,我使用:
${:import(javax.swing.SwingUtilities)}
// Ensure that any Swing components will be invoked only from the AWT thread
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
${line_selection}${cursor}
}
});
因此,我可以突出显示违规语句,并使用Shift + Alt + Z环绕。我把这个模板称为swinvoke。
为一个事件创造一切
因为在Java中创建事件有点麻烦——所有这些接口、方法和东西都要为一个事件编写——我制作了一个简单的模板来创建一个事件所需的一切。
${:import(java.util.List, java.util.LinkedList, java.util.EventListener, java.util.EventObject)}
private final List<${eventname}Listener> ${eventname}Listeners = new LinkedList<${eventname}Listener>();
public final void add${eventname}Listener(${eventname}Listener listener)
{
synchronized(${eventname}Listeners) {
${eventname}Listeners.add(listener);
}
}
public final void remove${eventname}Listener(${eventname}Listener listener)
{
synchronized(${eventname}Listeners) {
${eventname}Listeners.remove(listener);
}
}
private void raise${eventname}Event(${eventname}Args args)
{
synchronized(${eventname}Listeners) {
for(${eventname}Listener listener : ${eventname}Listeners)
listener.on${eventname}(args);
}
}
public interface ${eventname}Listener extends EventListener
{
public void on${eventname}(${eventname}Args args);
}
public class ${eventname}Args extends EventObject
{
public ${eventname}Args(Object source${cursor})
{
super(source);
}
}
如果您有共享单个eventtobject的事件,只需删除模板插入的自定义事件,并更改raise___()和____()上的适当部分。
我已经使用泛型接口和泛型类编写了一个漂亮、小巧、优雅的事件机制,但由于Java处理泛型的方式,它无法工作。=(
编辑:
1)我遇到了线程在事件发生时添加/删除侦听器的问题。List在使用时不能被修改,所以我在侦听器列表被访问或使用的地方添加了同步块,锁定在列表本身上。