我最近开始阅读Joshua Bloch的Effective Java。 我发现Builder模式的想法(书中的第2项)真的很有趣。 我试图在我的项目中实现它,但有编译错误。 以下是我正在尝试做的事情: 具有多个属性的类及其构build器类: public class NutritionalFacts { private int sodium; private int fat; private int carbo; public class Builder { private int sodium; private int fat; private int carbo; public Builder(int s) { this.sodium = s; } public Builder fat(int f) { this.fat = f; return this; } public Builder carbo(int […]
我有这样的内容excel文件: A1:SomeString A2:2 所有字段都设置为string格式。 当我使用POI在java中读取文件时,它告诉A2是数字单元格格式。 问题是,在A2中的值可以是2或2.0(我想能够区分它们),所以我不能只使用.toString() 。 我能做些什么来读取string的值?
我在这里读了几个关于静态方法的线程,我想我明白滥用/过度使用静态方法会导致的问题。 但是我没有真正明白为什么很难嘲讽静态方法。 我知道其他嘲笑的框架,如PowerMock,可以做到这一点,但为什么不能Mockito? 我读过这篇文章 ,但作者似乎对static这个词虔诚,也许这是我的不理解。 一个简单的解释/链接将是伟大的。
我在我的项目的根目录中有一个资源文件夹/包,我“不要”要加载某个文件。 如果我想加载某个文件,我会使用class.getResourceAsStream,我会很好! 我真正想做的是在资源文件夹中加载一个“文件夹”,在文件夹内的文件上循环,并获取每个文件的stream并读取内容…假设文件名在运行前不确定… 我该怎么办? 有没有办法获得您的jar文件中的文件夹内的文件列表? 请注意,具有资源的Jar文件与正在运行代码的jar文件是相同的… 提前致谢…
我需要使用合理的单位显示文件大小为string。 例如 1L ==> "1 B"; 1024L ==> "1 KB"; 2537253L ==> "2.3 MB" 等等 我发现这个以前的答案 ,我不觉得满意 我提出了自己的解决scheme,也有类似的缺点: private static final long K = 1024; private static final long M = K * K; private static final long G = M * K; private static final long T = G * K; public static String […]
我想知道为什么方法String.valueOf(int i)存在? 我正在使用此方法将int转换为String并刚刚发现了Integer.toString(int i)方法。 看过这些方法的实现后,我看到第一个调用第二个。 因此,我所有对String.valueOf(int i)调用都会涉及一个以上的调用,而不是直接调用Integer.toString(int i)
新的Java 8stream框架和朋友提供了一些非常简洁的java代码,但是我遇到了一个看似简单的情况,这很难做到简洁。 考虑一个List<Thing> things和方法Optional<Other> resolve(Thing thing) 。 我想把这些Thing映射到Optional<Other> s并获得第一个Other 。 明显的解决scheme是使用things.stream().flatMap(this::resolve).findFirst() ,但flatMap需要你返回一个stream,而Optional没有stream()方法(或者它是Collection或提供方法将其转换为或Collection为一个Collection )。 我能想到的最好的是这样的: things.stream() .map(this::resolve) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); 但是,这似乎是一个非常普遍的情况,似乎非常啰嗦。 任何人有更好的主意?
有没有一种简单的方法从Hibernate Criteria中获取(将要生成的)sql? 理想情况下,我会有这样的东西: Criteria criteria = session.createCriteria(Operator.class); … build up the criteria … … and then do something like … String sql = criteria.toSql() (But this of course does not exist) 这个想法是使用sql作为一个巨大的'MINUS'查询的一部分(我需要find2个相同的模式之间的差异 – 结构相同,而不是在数据 – 和hibernate不支持的MINUS) (顺便说一句,我知道我可以检查日志文件中的SQL)
作为最近一个问题的后续,我想知道为什么在Java中不可能读取/写入TCP套接字来检测套接字是否被对方正常closures? 无论是使用pre-NIO Socket还是使用NIO SocketChannel似乎都是如此。 当对端正常closuresTCP连接时,连接两端的TCP协议栈都知道这个事实。 服务器端(启动closures的那个)以FIN_WAIT2状态结束,而客户端(没有明确响应closures的那一端)以状态CLOSE_WAIT结束。 为什么在Socket或SocketChannel没有可以查询TCP堆栈的方法来查看底层的TCP连接是否已经终止? TCP堆栈是不是提供这样的状态信息? 还是这是一个devise决定,以避免昂贵的内核调用? 在已经发布了这个问题的一些答案的用户的帮助下,我想我会看到问题可能来自哪里。 未明确closures连接的一端以TCP状态CLOSE_WAIT结束,意味着连接处于closures状态,并等待该端发出自己的CLOSE操作。 我想这是公平的isConnected返回true和isClosed返回false ,但为什么不是有像isClosing ? 以下是使用pre-NIO套接字的testing类。 但是使用NIO获得相同的结果。 import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) throws Exception { final ServerSocket ss = new ServerSocket(12345); final Socket cs = ss.accept(); System.out.println("Accepted connection"); Thread.sleep(5000); cs.close(); System.out.println("Closed connection"); ss.close(); Thread.sleep(100000); } } import java.net.Socket; […]
重载方法和重写方法有什么区别? 任何人都可以用一个例子来解释吗?