Tag:

如何正确使用generics持有人

我正在尝试为我的应用程序中使用的不同对象创建一个Holder类,我最终得到的代码工作正常,直到某种程度上,构建器模式适用于可选字段,但我想这个持有者可以重构为接受任意数量的参数 package pojos; public class Holder { private final T t; private final R r; private final S s; private final U u; private Holder(final Builder builder) { this.t = builder.t; this.r = builder.r; this.s = builder.s; this.u = builder.u; } public T getField1() { return this.t; } public R getField2() { return this.r; } […]

无法复制:“比较方法违反了其总合同!”

我收到以下错误:“比较方法违反了其总合同!” 使用以下比较器时,我无法使用jUnit复制exception。 我想知道导致这个问题的原因以及如何复制它。 其他一些例子有相同的问题而不是如何复制它。 public class DtoComparator implements Comparator { @Override public int compare(Dto r1, Dto r2) { int value = 0; value = r1.getOrder() – r2.getOrder(); if (value == 0 && !isValueNull(r1.getDate(), r2.getDate())) value = r1.getDate().compareTo(r2.getDate()); return value; } private boolean isValueNull(Date date, Date date2) { return date == null || date2 == null; […]

如何标记方法必须?

假设您使用构建器模式创建类名Person,并假设Builder类包含方法body() , head() , arms() ,当然还有build()并且您认为方法head()和build()必须使用这个class级的用户。 我们想以某种方式标记这些方法是强制性的,如果可能的话使用注释。 如果这个类的用户试图构建一个Person实例但是忘了调用这些方法中的任何一个,我们希望得到某种警告 – 来自java编译器,或者来自我们用来构建我们的Eclipse或Maven项目 – 他们中的任何一个都可以。 有可能吗? 你会建议哪种方式?

我可以在java中使用方法链接而不执行不安全操作的抽象构建器类吗?

我正在尝试为一些构建器类创建一个抽象基类,这样我就可以轻松地在Builder实现之间重用代码。 我希望我的构建器支持方法链接,因此方法必须返回最具体类型的“this”实例。 我想我可以用generics来做这件事。 不幸的是,如果不使用不安全的操作,我就无法做到这一点。 可能吗? 下面是我如何尝试它(以及它如何工作)的示例代码。 我想避免在“foo()”中输入T(导致未经检查的警告),这可以吗? public class Builders { public static void main( final String[] args ) { new TheBuilder().foo().bar().build(); } } abstract class AbstractBuilder<T extends AbstractBuilder> { public T foo() { // set some property return (T) this; } } class TheBuilder extends AbstractBuilder { public TheBuilder bar() { // set some […]

如何在我的ModelInput类中使用Joshua Bloch的版本描述的Builder模式?

我正在尝试使用Builder Pattern为我的下面的类。最初我使用我的类的构造函数来设置所有参数但不小心我遇到了Builder模式,它看起来很适合我的用例。 下面是我的类,其中人们将主要传递userId , clientId和parameterMap但其他字段是可选的,它们可能会也可能不会传递它。 而且如果他们没有传递任何超时值,我需要将默认超时值设置为500,但如果他们传递任何超时值,那么它应该覆盖我的默认超时值。 这里Preference是一个有四个字段的ENUM。 public final class ModelInput { private long userid; private long clientid; private long timeout = 500L; private Preference pref; private boolean debug; private Map parameterMap; public ModelInput(long userid, long clientid, Preference pref, Map parameterMap, long timeout, boolean debug) { this.userid = userid; this.clientid = clientid; this.pref = pref; […]

Spring MVC转换如何

我有车辆服务,其中有零件清单。 添加新服务不是问题,查看服务不是问题,但是当我尝试实现编辑时,它不会预先选择部件列表。 因此,我认为这是一个Thymeleaf问题,我在这里发布问题。 我得到的答案是尝试实现弹簧转换服务。 我做到了(我想),现在我需要帮助让我摆脱这个烂摊子。 问题是视图将来自服务的零件实例与包含所有零件的零件实例的零件实例进行比较,并且从不使用转换器,因此它不起作用。 我没有收到错误……只是在视图中,未选择部件。 您将找到转换器,WebMVCConfig,PartRepository,ServiceController和html w / thymeleaf,供您参考。 我究竟做错了什么??? 转换器: PartToString: public class PartToStringConverter implements Converter { /** The string that represents null. */ private static final String NULL_REPRESENTATION = “null”; @Resource private PartRepository partRepository; @Override public String convert(final Part part) { if (part.equals(NULL_REPRESENTATION)) { return null; } try { return part.getId().toString(); […]

java.library.path中没有ocijdbc9

当我尝试运行Java应用程序时,收到以下错误: Exception in thread “main” java.lang.UnsatisfiedLinkError: no ocijdbc9 in java.library.path 我的电脑上没有文件ocijdbc9.* ,但我在%ORACLE_HOME%\bin有ocijdbc10.dll 。 %ORACLE_HOME%被正确指定,所以我认为问题是应用程序正在搜索错误的版本(9而不是10)。 Oracle和Java Builder都是新安装的,所以问题可能出在项目首选项中? 您对如何搜索指定了错误版本的地方有任何想法吗?

在Struts 2中绑定后更改参数

我有一个从用户接收一些参数的动作(例如日期)。 此操作会生成许多不同的报告,因此它有许多不同的方法。 我需要在每个方法之前调整这些参数(将时间设置为午夜)。 在绑定参数之前执行prepare方法。 是否有其他拦截器或任何其他允许我这样做的约定?

用Java中的等效字符替换HTML代码

目前我正在努力在java中转换具有等效字符的HTML代码。 我需要将以下代码转换为字符。 è – è ® – ® & – & ñ – ñ & – & 我尝试使用正则表达式模式 (&#x)([\\d|\\w]*)([\\d|\\w]*)([\\d|\\w]*)([\\d|\\w]*)(;) 当我调试时, matcher.find()给了我true但是控件跳过我编写转换代码的循环。 不知道那里发生了什么。 另外,有没有办法优化这个正则表达式? 任何帮助表示赞赏。 例外 java.lang.NumberFormatException: For input string: “x26” at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at org.apache.commons.lang.Entities.unescape(Entities.java:683) at org.apache.commons.lang.StringEscapeUtils.unescapeHtml(StringEscapeUtils.java:483)