小编gav*_*koa的帖子

寻找标准库或技术来获得OBJECT for Java的漂亮印刷表示

为了理解某些代码的内部结构或错误的打印转储,我在Python和Emacs lisp中使用类似pp的函数.

现在我来到Java并寻找标准库或tecnique来获得OBJECT for Java的漂亮印刷表示.

似乎当前的Java规范允许在运行时内省Java对象.但内省可能不是那么强大.使用new Object [] arg 无法调用m(Object o)

注意希望源代码美化!我正在寻找运行时漂亮的打印Java对象转储.

注2:这些问题相似但不完全相同:

java dump pretty-print

5
推荐指数
2
解决办法
6023
查看次数

使用maven进行树外构建.可能吗?

我开始学习几个发行版的包装(目前是Cygwin和Debian).

他们需要构建系统以允许树外构建(同义词源外构建):

http://wiki.debian.org/UpstreamGuide#Out-of-Tree_Builds

要解决"dumb"构建系统,例如cygport建议使用lndir(来自xutils项目):

  lndir ${S} ${B}
  cd {B}
  ...build-commands...

我读了mvn(1)手册页,但没有找到任何适当的东西.接下来我试试:

  $ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  ...
  $ pwd
  /maven/simple
  $ ls 
  my-app
  $ mvn -f my-app/pom.xml compile
  ...
  [INFO] --- maven-compiler-plugin:2.0.2:compile (default-compile) @ my-app ---
  [INFO] Compiling 1 source file to /maven/simple/my-app/target/classes

正如您可以看到在源根层次结构中创建的目标目录,而我正在寻找避免这种情况的方法.

是否可以使用maven 进行树外构建?如何?

java build maven

5
推荐指数
2
解决办法
2656
查看次数

为开发人员命名包含支持脚本、配置、文档等的项目目录的常见做法

我处理的是一小组项目,因此缺乏有关希望进行项目开发的软件项目文件层次结构中目录命名约定的知识。

我查看知名项目(如 Firefox、GCC、binutils、Linux、Emacs、VIM 等)并收集一些常见目录(我自己写的评论,所以他们不会假装是真的......):

  • examplessamples在迷你脚本或迷你程序或迷你配置中显示项目的实际用法。
  • scripts, support- 缺少脚本/实用程序的包装器或副本,以提供跨环境构建。
  • tools - 用于配置或调试项目的额外实用程序。
  • contrib - 用户提供的脚本、配置等...
  • misc, etc- 未分类的文件(如果您不知道它的正确位置)。
  • config, extra- 不知道...

虽然src/test/build/dist/lib/和其他目录命名惯例决定由前卫LANGS /平台/框架等,这似乎目录通用于所有类型的项目。

因此,我为保存项目支持文件的目录寻找命名约定的指南(官方或非官方)。

与常规项目文件最本质的区别在于,这些文件不在项目发布构建中使用,或者在极少数情况下使用。

附注。有人可以争辩说这不是问题。但是我有真正的任务来提交几个脚本(从数据库转储菜单的 sql 脚本,为 web 控制器转储 url 映射的脚本等)并查找应该保存这些文件的目录名......

聚苯乙烯。我努力收集约定:

coding-style naming-conventions

5
推荐指数
1
解决办法
1760
查看次数

Java DecimalFormat,是否可以按小数部分分组?

我需要打印小数字(直方图上的百分比),但java.text.DecimalFormat做了一些奇怪的事情。为了:

System.out.println((new DecimalFormat("#,##0.######")).format(123456.000123));
System.out.println((new DecimalFormat("#,##0.######")).format(0.000123));
System.out.println((new DecimalFormat("#,##0.###x###x###x###")).format(0.001));
Run Code Online (Sandbox Code Playgroud)

我有:

123,456.000123
0.000123
0.001xxx
Run Code Online (Sandbox Code Playgroud)

似乎java.text.DecimalFormat专为格式化货币而设计......

是否可以使用java.text.DecimalFormat将小数部分分组?

或者建议任何其他格式化库...

我期望这样或类似的:

GoodFormater("0.123456") === "0.123'456"
Run Code Online (Sandbox Code Playgroud)

java floating-point decimalformat

5
推荐指数
1
解决办法
323
查看次数

Java Sun/Oracle Bug数据库:新的URL?

看来太阳网址终于破了:http://bugs.sun.com/

虽然它仍然提到:

http://www.oracle.com/technetwork/java/javase/community/index.html

我仍然可以在以下网址提交错误:http://bugreport.sun.com/bugreport/

但即使是邮件中的链接也提到:http://bugs.sun.com/

有没有人找到新的链接?

更新使用此链接:https://bugs.openjdk.java.net/ - 保留错误号码!

java

5
推荐指数
1
解决办法
1139
查看次数

在shell脚本中查找shell可执行文件目录的平台独立方式是什么?

根据 POSIX:

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html

在某些情况下,它并不明显。例如:

If the file is not in the current working directory,
the implementation may perform a search for an executable
file using the value of PATH, as described in Command Search and Execution.
Run Code Online (Sandbox Code Playgroud)

我的 Bash 4.x 没有遵循这个可选规则(出于安全考虑??)所以我无法测试它在现实生活中的情况......

在shell脚本中查找shell可执行文件目录的平台独立方式是什么?

附注。此外dirname $0案例失败:

#!/bin/sh
echo $0
dirname $0
Run Code Online (Sandbox Code Playgroud)

当你:

$ sh runme.sh
runme.sh
.
Run Code Online (Sandbox Code Playgroud)

所以你需要这样的东西:

CMDPATH=`cd $(dirname $0); echo $PWD`
Run Code Online (Sandbox Code Playgroud)

为了使代码仅依赖于内置 shell 功能,我将代码重写为:

PREVPWD=$PWD
cd ${0%${0##*/}}.
CMDPATH=$PWD
cd $PREVPWD
Run Code Online (Sandbox Code Playgroud)

这看起来很丑,但不需要 fork 任何可执行文件......

bash shell posix cross-platform sh

5
推荐指数
1
解决办法
1077
查看次数

制作伪造的javax.sql.DataSource吗?

我必须使用String Test框架编写测试,其中使用了许多数据库连接。

在测试中,我不需要所有数据源,但Spring希望它们全部注入。

是否有任何标准或众所周知的伪造javax.sql.DataSource实现只是为了满足Spring DI机制?

java testing spring datasource spring-test

5
推荐指数
2
解决办法
3620
查看次数

Java 8流API - 是否有标准方法将Map中的每个值处理为不同的类型?

我学习Java 8 Lambda表达式流API.为了理解我试着使表达模拟SQL问题:

select department, avg(salary) from employee group by department
Run Code Online (Sandbox Code Playgroud)

对于:

private static class Employee {
    public String name;
    public String department;
    public int salary;
}
Run Code Online (Sandbox Code Playgroud)

官方教程中的解决方案:

empls.stream().collect(
    Collectors.groupingBy(
        x -> x.department,
        Collectors.averagingInt(x -> x.salary)))
Run Code Online (Sandbox Code Playgroud)

在我找到这个解决方案之前,我采用分组计算平均值的策略:

Map<String, List<Employee>> tmp =
    empls.stream().collect(Collectors.groupingBy(x -> x.department));
Run Code Online (Sandbox Code Playgroud)

并将仿函数应用于每个值.但是在Map界面中没有将值转换为不同类型的方法.在我的情况下减少列表到Double.标准SE API仅提供将值转换为相同类型的方法replaceAll() ...

什么Java 8样式方法/技巧/单行将Map值转换成不同类型?像伪代码一样工作:

Map<K, V2> map2 = new HashMap<>();
for (Map.Entry<K, V1> entry : map1.entrySet()) {
     map2.add(entry.getKey(), Function<V1, V2>::apply(entry.getValue()));
 }
Run Code Online (Sandbox Code Playgroud)

java java-8

5
推荐指数
1
解决办法
3123
查看次数

处理 JPA 中的空或 null 集合参数

在注释内部org.springframework.data.jpa.repository.@Query,我检查集合中的字段是否存在,如果集合为空,则可能忽略集合:

@Query(""select e from #{#entityName} where e.type in :lst or 0 = :lstSize")
List<Entity> findByLst(@Param("lst") List<XEnum> lst, @Param("lstSize") int lstSize);
Run Code Online (Sandbox Code Playgroud)

我将代码称为:

List<XEnum> lst = ...;
int lstSize = (lst == null) ? 0 : lst.size();
findByLst(lst, lstSize);
Run Code Online (Sandbox Code Playgroud)

对于 Oracle DB 在 Hibernate 记录的情况下lst = null

DEBUG [nio-8443-exec-4] org.hibernate.SQL
entity0_.type in (?) or 0=?
TRACE [nio-8443-exec-4] org.hibernate.type.EnumType
Binding null to parameter: [1]
TRACE [nio-8443-exec-4] org.hibernate.type.descriptor.sql.BasicBinder
binding parameter [2] as [INTEGER] - [0]
Run Code Online (Sandbox Code Playgroud)

对于 Hibernate 记录的情况lst = …

hibernate jpa jpql spring-data spring-data-jpa

5
推荐指数
1
解决办法
8423
查看次数

关闭InputStreamReader还会关闭基础InputStream吗?

JavaDoc for InputStreamReader没有透露有关关闭基础的信息InputStream

https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#close--

从类复制的描述:读者

关闭流并释放与其关联的所有系统资源。一旦关闭流,进一步的read(),ready(),mark(),reset()或skip()调用将引发IOException。关闭先前关闭的流无效。

关闭InputStreamReader还会关闭基础InputStream吗?

更新于:

InputStreamReader istream = new InputStreamReader(conn.getInputStream(), "UTF-8")
istream.close();
Run Code Online (Sandbox Code Playgroud)

我需要关闭conn.getInputStream()吗?

InputStreamReader实现直接close调用的StreamDecoder是本机类。这就是为什么我问一个问题(向您低调!)。

java

5
推荐指数
1
解决办法
1561
查看次数