我正在编写一些逻辑,要求将空日期视为将来永远的意义(有关日期是一个到期日期,可能存在也可能不存在).我希望只将null转换为最大可能的Date,而不是在整个代码中为null日期添加特殊情况.我没有看到任何明显的方法来获得这样的价值而不用硬编码.什么是获得使用Date实现的最大值的最佳方法?
如果我从java.io.InputStream开始,那么将整个流读取到String中的最简单方法是什么(假设是utf-8)?
这应该很容易,但我主要是一个C#人,谷歌让我失望.谢谢.
大部分都使用C#,我倾向于考虑Java中没有的C#功能.在去年广泛使用Java之后,我开始发现我希望在C#中使用的Java功能.以下是我所知道的列表.任何人都可以想到C#背景的人可能没有意识到的其他Java语言特性吗?
文章http://www.25hoursaday.com/CsharpVsJava.html和http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp给出了一个非常广泛的Java和C#之间的差异列表,但我想知道我是否遗漏了(非常)长篇文章.我还可以想到我在两篇文章中都没有提到的一个特征(协变返回类型).
请限制语言或核心库功能的答案,这些功能无法通过您自己的自定义代码或第三方库有效实现.
协变返回类型 - 方法可以由返回更具体类型的方法覆盖.在实现接口或扩展类时很有用,并且您希望重写方法返回更具体类的类型.这可以使用C#中的显式接口实现来模拟,但是在重写类方法时没有简单的等价物.
枚举是类 - 枚举是java中的完整类,而不是像.Net中的原语的包装.Java允许您在枚举上定义字段和方法.
匿名内部类 - 定义实现方法的匿名类.虽然.Net中的代表可以使用Java中的大部分用例,但在某些情况下,您确实需要将多个回调作为一个组进行传递.选择使用匿名内部类是很好的.
检查异常 - 我可以看到它在与Java应用程序一起使用的常见设计的上下文中是如何有用的,但是我对.Net的经验使我习惯于仅在不可恢复的条件下使用异常.IE异常表示应用程序中存在错误,仅用于记录日志.我还没有完全考虑在正常程序流程中使用异常.
strictfp - 确保严格的浮点运算.我不确定哪种应用会发现这有用.
接口中的字段 - 可以在接口中声明字段.我从来没有用过这个.
static imports - 允许一个人使用类的静态方法,而不用类名限定它.我今天才意识到这个功能存在.这听起来很方便.
我有一个类似于以下的表结构:
create table MAIL (
ID int,
FROM varchar,
SENT_DATE date
);
create table MAIL_TO (
ID int,
MAIL_ID int,
NAME varchar
);
Run Code Online (Sandbox Code Playgroud)
我需要运行以下查询:
select m.ID
from MAIL m
inner join MAIL_TO t on t.MAIL_ID = m.ID
where m.SENT_DATE between '07/01/2010' and '07/30/2010'
and t.NAME = 'someone@example.com'
Run Code Online (Sandbox Code Playgroud)
有没有办法设计索引,以便两个条件都可以使用索引?如果我在MAIL.SENT_DATE上放置索引并在MAIL_TO.NAME上放置索引,则数据库将选择使用其中一个索引或另一个索引,而不是两者.在按第一个条件过滤后,数据库始终必须对第二个条件的结果进行全面扫描.
我正在考虑设计类似于以下的数据库模式:
Person (
PersonID int primary key,
PrimaryAddressID int not null,
...
)
Address (
AddressID int primary key,
PersonID int not null,
...
)
Run Code Online (Sandbox Code Playgroud)
Person.PrimaryAddressID和Address.PersonID将是相应表的外键.
显而易见的问题是,无法在任何一个表中插入任何内容.有没有办法设计一个工作模式来强制每个具有主要地址的人?
是否有任何实用的方法以类型安全的方式引用类的方法?一个基本的例子是,如果我想创建类似以下实用程序函数:
public Result validateField(Object data, String fieldName,
ValidationOptions options) { ... }
Run Code Online (Sandbox Code Playgroud)
为了打电话,我必须这样做:
validateField(data, "phoneNumber", options);
Run Code Online (Sandbox Code Playgroud)
这迫使我要么使用魔法字符串,要么使用该字符串声明一个常量.
我很确定没有办法用库存Java语言来解决这个问题,但是有某种(生产级)预编译器或替代编译器可以提供解决方法吗?(类似于AspectJ如何扩展Java语言)做以下事情会很好:
public Result validateField(Object data, Method method,
ValidationOptions options) { ... }
Run Code Online (Sandbox Code Playgroud)
并称之为:
validateField(data, Person.phoneNumber.getter, options);
Run Code Online (Sandbox Code Playgroud) 我正在编写一些内容,通过散列其内容样本来总结文件系统中的文件.它构造了一个目录和文件树.每个文件条目都具有文件内容的哈希值.对于每个目录条目,我想存储目录中所有文件内容的哈希值,包括子目录中的那些 - 我将其称为目录内容哈希.
关于目录内容哈希的棘手问题是我希望它独立于目录的结构.如果两个目录包含相同的文件,但是使用不同的子目录结构组织,则哈希值应该相同.
我能想到的唯一两种方法是:
计算所有文件内容哈希值的串联的MD5.为了获得所需的哈希属性,我必须列出目录中的所有文件,按哈希对它们进行排序,连接已排序的哈希值,然后在串联上运行MD5.这似乎比我想要的慢.我可以通过使用合并排序非常有效地进行排序,同时计算整个树中的目录内容哈希值,但我无法计算大量输入上的大量MD5哈希值.
使用XOR组合文件内容哈希.每个目录只需要对其直接子节点的文件内容哈希和目录内容哈希进行异或.这非常快速和简单,但不是非常抗冲击.它甚至无法区分包含1个文件实例的目录和包含同一文件的3个实例的目录.
如果有一个函数可以使用类似于方法#2中使用XOR的方式,那就更好了,但更具抗冲突性.我认为方法#1对于这个具体案例来说足够快,但为了探索所有选项/知识好奇心/未来应用程序,我想知道是否有一个满足描述的函数标题(我有一个模糊的记忆,想要过去几次想要这样的功能).
谢谢.
我在 Oracle 中使用 Hibernate 和 char(6) 列时遇到了一些问题。该表的结构如下:
CREATE TABLE ACCEPTANCE
(
USER_ID char(6) PRIMARY KEY NOT NULL,
ACCEPT_DATE date
);
Run Code Online (Sandbox Code Playgroud)
对于用户 ID 少于 6 个字符的记录,我可以在使用 SQuirreL 运行查询时选择它们,而无需填充用户 ID。IE 如果存在用户 ID 为“abc”的记录,则以下命令将返回一条记录。
select * from acceptance where user_id = "abc"
Run Code Online (Sandbox Code Playgroud)
不幸的是,当通过 Hibernate (JPA) 进行选择时,以下返回 null:
em.find(Acceptance.class, "abc");
Run Code Online (Sandbox Code Playgroud)
如果我填充该值,它会返回正确的记录:
em.find(Acceptance.class, "abc ");
Run Code Online (Sandbox Code Playgroud)
我正在开发的模块从系统的其他部分获取未填充的用户 ID。除了在将用户 ID 提供给 Hibernate 之前将其调整为一定长度的代码之外,是否有更好的方法让 Hibernate 工作?(如果长度发生变化,可能会出现维护问题)
我正在尝试诊断Sun One 9.1 Application Server中的PermGen内存泄漏问题.为了做到这一点,我需要获得JVM进程的堆转储.不幸的是,JVM进程是在Windows上运行的1.5版本.显然,触发堆转储的方法都不支持该设置.我可以让JVM在内存耗尽或关闭后执行堆转储,但我需要能够在任意时间获取堆转储.
通常提到的两种获取堆转储的方法是使用jmap或使用HotSpotDiagnostic MBean.这些都不支持Windows上的jvm 1.5.
有没有我错过的方法?如果有一种方法可以以编程方式触发堆转储(不使用HotSpotDiagnostic MBean),那也可以...
如果在Windows中真的不可能这样做,我想我不得不求助于构建Linux VM并在那里进行调试.
谢谢.
在阅读了有关此错误的先前问题后,似乎所有人都认为您需要在所有数据源上启用XA.但:
有关应用程序的信息:
该应用程序是在Sun Java Application Server 9.1上运行的EJB
我使用类似下面的spring上下文来设置hibernate会话工厂:
<bean id="dbADatasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/dbA"/>
</bean>
<bean id="dbASessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dbADatasource" />
<property name="hibernateProperties">
hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
hibernate.default_schema=schemaA
</property>
<property name="mappingResources">
[mapping resources...]
</property>
</bean>
<bean id="dbBDatasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/dbB"/>
</bean>
<bean id="dbBSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dbBDatasource" />
<property name="hibernateProperties">
hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
hibernate.default_schema=schemaB
</property>
<property name="mappingResources">
[mapping resources...]
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
两个JNDI资源都是javax.sql.ConnectionPoolDatasoure.他们实际上都指向同一个连接池,但我们有两个不同的JNDI资源,因为有两个,完全独立的,表组将移动到在未来不同的数据库的可能性.
然后在代码中,我做:
sessionA = dbASessionFactory.openSession();
sessionB = dbBSessionFactory.openSession();
sessionA.beginTransaction();
sessionB.beginTransaction();
Run Code Online (Sandbox Code Playgroud)
sessionB.beginTransaction()行在这篇文章的标题中产生错误 - 有时候.我在两个不同的sun应用服务器上运行了应用程序.在一个运行它很好,另一个抛出错误.虽然它们连接到不同但等效的数据库,但我认为两台服务器的配置方式没有任何区别.
所以问题是
谢谢.
PS堆栈跟踪是:
Local …Run Code Online (Sandbox Code Playgroud) 有问题的代码块如下.代码几乎总是有效,但有时它会永远挂起.该应用程序是一个EJB计时器bean.
实际上,它只挂了一次,我无法重现它.它的生产工作近两年没有任何问题.但是,在测试应用程序的更新版本时,计时器在运行几天后就冻结了,并且从未在上次运行时释放数据库锁.日志清楚地表明它冻结在下面的代码块中的某处.它运行的命令是'chmod'.
public void shellExec(String cmd, File workDir) {
String s = null;
try {
Process p = Runtime.getRuntime().exec(cmd, null, workDir);
int i = p.waitFor();
if (i == 0){
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
// read the output from the command
while ((s = stdInput.readLine()) != null) {
logger.debug(s);
}
}
else {
BufferedReader stdErr = new BufferedReader(new InputStreamReader(p.getErrorStream()));
// read the output from the command
while ((s = stdErr.readLine()) != null) {
logger.debug(s);
}
}
} catch (Exception …Run Code Online (Sandbox Code Playgroud) 有谁知道有助于生成C#代码的库?例如,如果我需要生成一个包含类定义的*.cs文件,我希望能够使用对象树(类似于表达式树)指定类和方法体,然后告诉库给我好格式化的C#代码作为字符串.
谢谢.