在freemarker模板中,我想将布尔变量扩展为类似的字符串:
<#assign booleanVar = "test".isEmpty() />
state: ${booleanVar} <#-- this throws an exception! -->
Run Code Online (Sandbox Code Playgroud)
这是我想要的输出:
state: false
Run Code Online (Sandbox Code Playgroud)
我现在发现达到这个目标的唯一方法是:
state: <#if booleanVar>true<#else>false</#if>
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?
我们有一个系统通过调用另一个返回一组Java对象的系统上的接口来执行"粗略搜索".一旦我们收到搜索结果,我需要能够根据描述属性状态的某些标准进一步过滤生成的Java对象(例如,从初始对象返回所有对象,其中xy> z && ab == c).
每次用于过滤对象集的标准部分是用户可配置的,我的意思是用户将能够选择要匹配的值和范围,但是他们可以从中选择的属性将是固定集.
对于每次搜索,数据集可能包含<= 10,000个对象.搜索将由应用程序用户群手动执行,每天不超过2000次(大约).值得一提的是,结果集中的所有对象都是已知的域对象类,它们具有描述其结构和关系的Hibernate和JPA注释.
在我的头脑中,我可以想到3种方法:
选项1似乎涉及很多网络中的物理数据库(Oracle 10g),可能会导致大量的网络和磁盘活动.还需要将每次搜索的结果与其他结果集隔离,以确保不同的搜索不会相互干扰.
选项2原则上似乎是一个好主意,因为它允许我在内存中进行更精细的查询,并且不需要结果数据的持久性,只有在搜索完成后才会丢弃.Gut的感觉是,这可能也非常高效,但可能会导致更大的内存开销(这很好,因为我们可以非常灵活地调整JVM获得的内存量).
选项3可能非常高效,但是我想避免这样做,因为我们编写的任何代码都需要经过仔细的测试,以至于实现灵活且足够强大的时间可能会令人望而却步.
我没有时间对所有3个想法进行原型设计,因此我正在寻找人们对上述3个选项的评论,以及我未考虑过的任何进一步的想法,以帮助我确定哪个想法可能是最合适的.我目前正倾向于选项2(在内存数据库中),所以很想听到有人在内存中查询POJO的经验.
希望我已经详细描述了这种情况,但是不要犹豫,询问是否需要任何进一步的信息来更好地理解这种情况.
干杯,
埃德
我一直回到这个问题的变种:它可能有一个非常简单的解决方案,但我似乎无法弄清楚...
我有一堆xQuantity形式的类,例如DistanceQuantity,AreaQuantity等,它们扩展了一个DimensionQuantity类.现在你可以添加或减去DistanceQuantity或AreaQuantity等,但你不能混合它们,所以我认为我需要在子类中有(短)加,减等方法,但我想减少任何逻辑重复到最低限度.但是,我需要返回子类的对象,这似乎很难从超类方法中做到.我相信这可以使用反射来完成,但AFAIK你仍然需要在子类方法的最后做一个演员,而且我被告知反射可能很昂贵......到目前为止我想出的最好的是:
在DistanceQuantity(和其他类似的):
public DistanceQuantity() {
}
public DistanceQuantity add(DistanceQuantity d1) {
DistanceQuantity dn = new DistanceQuantity();
Object o = super.add(dn, this, d1, DistanceUnit.REF_UNIT);
return (DistanceQuantity) o;
}
Run Code Online (Sandbox Code Playgroud)
在DimensionQuantity中(减去一些不太相关的语句):
public Object add(DimensionQuantity dn, DimensionQuantity d1, DimensionQuantity d2,
AbstractUnit au) {
dn.unit = au;
dn.scalar = d1.scalar + d2.scalar;
dn.units = dn.scalar;
return dn;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以提出更精简的代码 - 这仍然是类型安全的吗?TIA
我想知道如果一个方法在受包保护的类中是公共的或包受保护的话会有什么不同.
class Example {
public void test() {}
}
Run Code Online (Sandbox Code Playgroud)
代替
class Example {
void test() {}
}
Run Code Online (Sandbox Code Playgroud)
我想最大的能见度是由班级给出的.并且一种方法只能降低可见度并且增加可见性无效.
但它是有效的语法,所以也许我已经监督了什么?
我正在寻找一个完整的Java开发基础设施,其集成包括:
进一步我想:
......并且可选:
评估所有这些系统可能需要很长时间,使运行的基础架构的设置成为一个月或更长时间的工作.
在工作中我准备单独设置每个系统,但是对于我在家中的私人开发,我想要像Devware这样的东西- 一个开发环境虚拟设备(遗憾的是我没有找到下载链接),其中已经安装了所有内容和功能.
那么,您能否给我一些建议,哪些组合创建一个有效的基础设施?或者甚至更好地在哪里找到预配置的开发基础架构?
PS:我不承诺任何指定的产品,所以如果它们匹配得更好,请随意提出替代方案.
我正在寻找一个允许我解析java源文件的java库,它给了我代码的AST表示.
实际上我只对带有注释的类和方法定义感兴趣.我不需要方法代码的AST.
我正在使用此信息进行代码生成.这就是我无法首先编译源文件以从结果类文件中获取信息的原因.在生成一些额外的类之前,代码不会在没有错误的情况下编译.
当我在DB2上通过JDBC调用SQL语句并且语句失败时,我会捕获带有以下消息文本的SQLException:
com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703,
SQLERRMC=O.METADATENSATZ, DRIVER=3.52.95
Run Code Online (Sandbox Code Playgroud)
我尝试根据IBM发布的错误列表自动翻译消息,但是消息中的占位符引用了异常的其他元素.
在异常中查找这些元素时,我发现DB2ExceptionFormatter并尝试使用它来访问缺少的元素.
但在这里我停了下来,因为DB2ExceptionFormatter给了我一个线索:
尝试从服务器获取消息文本时出错.只有消息令牌可用.
所以我的问题是:我需要配置什么来从DB2服务器获取正确的消息?
如果我可以从服务器获得人类可读的消息,我可以直接使用它,而不必自己翻译它.
在另一个SO问题中,我问为什么我的Java程序在AMD上比在Intel机器上运行得更快.但似乎我是唯一一个观察过这一点的人.
现在,我想邀请您与SO社区分享您当地Java性能的数量.我在不同的硬件上观看JBoss的启动时观察到了很大的性能差异,因此我将此程序设置为此比较的基础.
如需参与,请下载JBoss 5.1.0.GA并运行:
jboss-5.1.0.GA/bin/run.sh (or run.bat)
Run Code Online (Sandbox Code Playgroud)
这启动了JBoss的标准配置,没有任何额外的应用程序.然后查找启动过程的最后一行,如下所示:
[ServerImpl] JBoss (Microcontainer) [5.1.0.GA (build:
SVNTag=JBoss_5_1_0_GA date=200905221634)] Started in 25s:264ms
Run Code Online (Sandbox Code Playgroud)
请重复此过程,直到打印时间稍微稳定并将此行与您的硬件上的一些注释一起发布(我使用cpu-z获取信息)和操作系统如下:
java version: 1.6.0_13
OS: Windows XP
Board: ASUS M4A78T-E
Processor: AMD Phenom II X3 720, 2.8 GHz
RAM: 2*2 GB DDR3 (labeled 1333 MHz)
GPU: NVIDIA GeForce 9400 GT
disc: Seagate 1.5 TB (ST31500341AS)
Run Code Online (Sandbox Code Playgroud)
使用您的投票将最快的配置带到顶部.
我对结果非常好奇.
编辑:
到目前为止,只有少数成员分享了他们的结果.我真的对其他一些架构获得的结果很感兴趣.如果某人使用MAC(桌面)或运行低于3 GHz 的Intel i7,请启动JBoss并分享您的结果.它只需要几分钟.
所以我正在尝试使用servlet,过滤器等构建一个谷歌应用程序引擎.我有一个看起来像这样的java文件:
public class Idea implements Comparator<Idea> {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private User author;
@Persistent
private String content;
@Persistent
private Date date;
@Persistent
private Map<User, Boolean> positiveVotes ;
@Persistent
private Map<User, Boolean> negativeVotes;
public Idea(User author, String content, Date date) {
this.author = author;
this.content = content;
this.date = date;
this.positiveVotes = new HashMap<User, Boolean>();
this.negativeVotes = new HashMap<User, Boolean>();
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行我的程序时,我得到一个异常堆栈,开头是:
Feb 13, 2010 5:01:23 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /sign
java.lang.IllegalArgumentException: positiveVotes: java.util.HashMap is not …Run Code Online (Sandbox Code Playgroud) java ×9
database ×1
db2 ×1
freemarker ×1
hardware ×1
jdbc ×1
jpa ×1
parsing ×1
performance ×1
persistence ×1
subclassing ×1
xml ×1
xsd ×1