小编maa*_*nus的帖子

java.lang.annotation.Retention的原因是什么?

我很清楚它的含义RetentionPolicy并且知道它们的作用以及何时使用它们似乎是有意义的.对于我自己的注释,我确切地知道它们是在运行时,类文件中还是仅仅用于编译时需要的.但是,使用库中定义的任何注释,您可以恕我直言.

例如,javax.annotation.Generated意味着标记生成的代码,但它很少有用.由于有更多的AFAIK工具对字节码比与源工作工具工作,这些信息就会消失,可以使用之前它.

由于在运行时缺少注释不会抛出 ClassNotFoundException(不像例如,缺少接口),使用RetentionPolicy.RUNTIME似乎不会造成伤害.还是我错了?

或者节省了几个字节使用不同Retentions 的原因?对我来说,这似乎导致太多问题值得.我错过了什么?

java annotations retention

18
推荐指数
2
解决办法
2009
查看次数

如何在不更改提交哈希的情况下更改git commit消息

标题不准确,但我不能在一行中表达得更好.

  • 我实际上知道如何改变这里的 git commit消息.
  • 但是我知道它总是会改变SHA-1,我想避免它.

我只想看到一个不同的消息git-log.我认为它可以以某种方式使用git-notes,但我没有管理它.


说明:

我需要它来修复提交消息中的错误.我总是在那里写一个文件的名称,其中包含我与客户的沟通(看起来就像T1234 Replace foo by bar).通信往往很长,所以我可以花很多时间,直到我发现我在提交消息中被错误的文档名称误导.

用于 git-notes

git-notes事实上看起来像这里所说的那样有效.但是我总是使用

git log --oneline
Run Code Online (Sandbox Code Playgroud)

所以我从来没有看到它.关于关于向用户说谎的评论:恕我直言,当这种情况发生时,只有在使用特殊的开关时才会接受--replace-messages-by-notes,不是吗?因为我总是使用别名而不是git log直接使用,所以我会得到我想要的东西而不需要输入很多东西.

你认为这是一个合理的功能要求还是你会向我推荐另一个工作流程?

git history

17
推荐指数
3
解决办法
1万
查看次数

是否有Java自定义集合实现的测试套件?

出于好奇,我Set为一个特殊情况写了一个自己的简单实现(其中所有可能的条目的集合是固定的,但它不是enum).它实际上非常简单,但显然,我的实现在没有大量测试的情况下无法使用(甚至可能在那时,但这是另一个主题;它主要是一个练习).

那么有没有我可以用于单元测试的测试套件呢?

java collections unit-testing

17
推荐指数
2
解决办法
1260
查看次数

假设Unicode和不区分大小写,模式".."是否匹配"FfIsS"?

这听起来像个笑话,但我可以证明这一点.

假设:

  • Dot匹配任何单个字符.
  • 不区分大小写的模式匹配s且仅当它匹配时才匹配s.toUpperCase().

以下所有内容都非常符合逻辑并且在Java中保留:

  • "?".matches(".") LATIN SMALL LIGATURE FFI(U + FB03)是一个字符,因此它必须匹配
  • "ß".matches(".") LATIN SMALL LETTER SHARP S(U + 00DF)是一个字符,因此它必须匹配
  • "?".toUpperCase().equals("FFI") 按Unicode标准(没有资本连字FFI)
  • "ß".toUpperCase().equals("SS") 按照Unicode标准(有一个大写的S,但它没有被使用)
  • "FfI".toUpperCase().equals("FFI") 明显
  • "sS".toUpperCase.equals("SS") 明显

因此,假设正则表达式中的第一个点代表?第二个点,则正则ß表达式必须匹配"FFISS",并且因为不区分大小写也是"FfIsS".

真的希望有一些错误,否则正则表达式会变得非常不可用.

问题:

  • 我的"证明"有什么问题?
  • 如果我的第二个假设不成立,那么"不区分大小写"究竟意味着什么?

java regex unicode case-insensitive case-folding

17
推荐指数
1
解决办法
1213
查看次数

什么是修订后的构建模式?

GoF的原始Builder模式与Joshua Bloch的"修订后的GoF Builder模式"有什么区别?

java design-patterns

16
推荐指数
2
解决办法
3000
查看次数

如何在java中获取目录url的文件/目录列表?

假设我有一个URL: http://java.sun.com/j2se/1.5/pdf我想得到pdf目录下所有文件/目录的列表.我正在使用java 5.我可以通过这个程序http://www.httrack.com/得到目录列表.但使用java我不知道是否可能.

有没有人知道如何在java中获取它或者这个程序如何完成java无法完成的工作?

java url

16
推荐指数
2
解决办法
3万
查看次数

如何在Java中找到重载方法?

写点的时候

doit(43, 44, "hello");
Run Code Online (Sandbox Code Playgroud)

编译器知道要调用哪个重载方法.当我想通过反思做同样的事情时,我需要找出自己,方法是

doit(Integer, double, CharSequence...);
Run Code Online (Sandbox Code Playgroud)

并通过类似的东西获得它

Class[] types = {Integer.class, double.class, CharSequence[].class};
declaringClass.getDeclaredMethod("doit", types);
Run Code Online (Sandbox Code Playgroud)

我想知道是否已经允许我写一些东西了

Method m = getMethod(declaringClass, "doit", 43, 44, "hello");
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人这样做了,因为JLS在这方面有点复杂.


实际上,行为与编译器完全相同是不可能的,因为在第1阶段,编译器只接受匹配而没有装箱和拆箱的方法.当getMethod从上面调用我的假设时,原语和它们的包装器之间的区别已经丢失(因为通过varargs传递参数时的自动装箱).这个问题似乎没有解决方案,所以让我们忽略它.

如答案所示,BeanUtils.invokeMethod接近.它应该找到最佳匹配,无论它意味着什么.查看MethodUtils.getMatchingAccessibleMethod显示了这一点

  • 它对varargs一无所知
  • 这是非确定性的

所以我正在寻找更好的东西.

java reflection overloading

16
推荐指数
1
解决办法
4065
查看次数

通过无知解决LazyInitializationException

这里有无数的问题,如何解决"无法初始化代理"问题,通过急切提取,保持交易开放,打开另一个OpenEntityManagerInViewFilter,等等.

但是,是否可以简单地告诉Hibernate忽略该问题并假装该集合为空?在我的情况下,不提取它只是意味着我不在乎.

这实际上是以下Y的XY问题:

我正在上课

class Detail {
    @ManyToOne(optional=false) Master master;
    ...
}

class Master {
    @OneToMany(mappedBy="master") List<Detail> details;
    ...
}
Run Code Online (Sandbox Code Playgroud)

并且想要提供两种请求:一个返回一个master包含所有的请求details,另一个返回一个包含masters 的列表details.结果将由Gson转换为JSON.

我试过session.clearsession.evict(master),但他们不碰代替使用的代理服务器details.有用的是

 master.setDetails(nullOrSomeCollection)
Run Code Online (Sandbox Code Playgroud)

感觉相当hacky.我更喜欢"无知",因为它通常适用而不知道代理的哪些部分.

写一个Gson TypeAdapter忽略AbstractPersistentCollectionwith的实例initialized=false可能是一种方式,但这取决于org.hibernate.collection.internal,这肯定没有好处.捕获异常TypeAdapter并不会听起来好多了.

一些答案后更新

我的目标不是" 加载数据而不是异常",而是 "如何获取null而不是异常"

Dragan提出了一个有效的观点,即忘记获取和返回错误的数据会比异常更糟糕.但有一个简单的方法:

  • 仅为收集执行此操作
  • 从来没有用过null他们
  • 返回null而不是空集合作为未获取数据的指示

这样,结果永远不会被错误地解释.如果我忘记取一些东西,响应将包含null哪些无效.

java orm hibernate jpa hibernate-mapping

16
推荐指数
1
解决办法
1154
查看次数

Hibernate拦截器和事件侦听器

我想知道是否有可能找出hibernate 对数据库的真正作用(即提交的更改).我想就某些变化通知另一个流程.

我猜测,事件类型小号POST_COMMIT_DELETE,POST_COMMIT_UPDATEPOST_COMMIT_INSERT应该做的,但由于刚好为零的文件,这只是一个猜测.有人可以证实吗?我错过了吗?

我也不确定如何获得真正写的东西.在PostInsertEvent同时包含Object entityObject[] state,这两个我应该信任?


一个侧面问题:我没有使用XML,没有Spring,没有JPA,只是ConfigurationbuildSessionFactory.这真的是听众应该注册的方式吗?

 EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory)
    .getServiceRegistry()
    .getService(EventListenerRegistry.class);
registry.appendListeners(....);
Run Code Online (Sandbox Code Playgroud)

我要求它作为它的1.依赖于实现细节,2完全丑陋,3几乎完全不可发现.

java hibernate transactions listener

15
推荐指数
1
解决办法
5511
查看次数

是否有用于测试Java中非随机性序列的软件?

我在寻找Java中的程序或库,能够找到字节序列的非随机属性.当给出一个巨大的文件时,运行一些统计测试并报告数据是否显示任何规律性.

我知道三个这样的程序,但不是Java.我尝试了所有这些,但它们似乎并不适合我(这是非常令人惊讶的,因为其中一个是由NIST).其中最古老的,死硬,工作正常,但它有点难以使用.

java testing random statistics

14
推荐指数
1
解决办法
1058
查看次数