在Java中,我希望能够定义标记接口,强制实现提供静态方法.例如,对于简单的文本序列化/反序列化,我希望能够定义一个看起来像这样的接口:
public interface TextTransformable<T>{
public static T fromText(String text);
public String toText();
Run Code Online (Sandbox Code Playgroud)
由于Java中的接口不能包含静态方法(如许多其他帖子/线程中所述:此处,此处,此处此代码不起作用.
然而,我正在寻找的是表达相同意图的一些合理范例,即对称方法,其中一个是静态的,并由编译器强制执行.现在我们能想到的最好的是某种静态工厂对象或通用工厂,这两者都不是真正令人满意的.
注意:在我们的例子中,我们的主要用例是我们有许多很多"值对象"类型 - 枚举或其他具有有限数量值的对象,通常不会超出其值,并且我们解析/ de -parse数秒钟的时间,所以实际上关心重用实例(如Float,Integer等)及其对内存消耗的影响/ gc
有什么想法吗?
编辑1:为了消除一些混乱 - 我们有许多不同的对象适合这种模式 - 实际上我们正试图为具有2个语义的调用者提出一些优雅的东西:
就我们对Flyweight,Factories的看法而言 - 它们都是我们考虑过的选项,我们真的试图看看我们是否能找到更优雅的东西,而不是依靠JavaDoc说"实现工厂并委托调用它,或按惯例在XXX地点公开"
(也发布在maven用户身上)
想知道是否有人可以了解pom.xml中与资源处理和WAR插件相关的元素继承.
pom [1]的文档的资源列在"合并的POM中的元素"下.我对当地poms对maven 2.2.1的一些实验似乎没有表现出这种行为.我看到它看起来像子项目(在多模块构建中)继承,但如果这些项目中的任何一个有自己的块,它将替换父项,而不是合并.那是对的吗?
例:
parent-pom.xml
|
|-> child-pom.xml
Run Code Online (Sandbox Code Playgroud)
以下工作正如我所期望的那样,dev中的文件未包含在最终WAR中.
家长的pom.xml
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>${dev-config.path}</exclude>
</excludes>
</resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
儿童的pom.xml
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>${dev-config.path}</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/rules</directory>
</resource>
<resource>
<directory>src/test/rules</directory>
</resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
对子进行以下更改(删除src/main/resources的任何声明)似乎导致在进程资源期间不考虑src/main/resource,而不是像我期望的那样从父进程继承.
儿童的pom.xml
<resources>
<resource>
<directory>src/main/rules</directory>
</resource>
<resource>
<directory>src/test/rules</directory>
</resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
[1] http://maven.apache.org/guides/introduction/introduction-to-the-pom.html s
我们希望实施一个" 故障屏障 "策略来管理应用程序中的异常.我们的应用程序有一件事是"回传"响应的概念,基本上是一个无操作,我们希望返回优先投掷500,400等HTTP状态代码 - 例如我们面向外部的应用程序应该总是返回一个有效的响应,即使抛出了一个底层的异常 - 我们想要处理该应用程序的内部,并仍然返回一个有效的noop响应.
我们的第一个实现是一个Servlet过滤器,它将把所有请求包装在try/catch块中,并从catch返回默认返回,例如:
try{
chain.doFilter()
} catch (Throwable t) {
generatePassbackResponse(HttpServletRequest req, HttpServletResponse res)
}
Run Code Online (Sandbox Code Playgroud)
虽然这主要是有效的,并且感觉很好和干净(我们可以返回漂亮的文本,适当地设置内容/类型等),但一个问题似乎是当抛出Exception时,响应仍然通过Status-Code:500来实现.
HttpServletResponse.setStatus(200)没有效果,javadoc确实说它只适用于普通请求.
我们的第二个实现思路是我们可能必须转发到另一个页面,或者将一个errorPage插入到web.xml中并手动sendError到该页面 - 尽管我们对是否有人有特定的推荐感兴趣.