为了理解某些代码的内部结构或错误的打印转储,我在Python和Emacs lisp中使用类似pp的函数.
现在我来到Java并寻找标准库或tecnique来获得OBJECT for Java的漂亮印刷表示.
似乎当前的Java规范允许在运行时内省Java对象.但内省可能不是那么强大.使用new Object [] arg 无法调用m(Object o)?
注意我不希望源代码美化!我正在寻找运行时漂亮的打印Java对象转储.
注2:这些问题相似但不完全相同:
我开始学习几个发行版的包装(目前是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 进行树外构建?如何?
我处理的是一小组项目,因此缺乏有关希望进行项目开发的软件项目文件层次结构中目录命名约定的知识。
我查看知名项目(如 Firefox、GCC、binutils、Linux、Emacs、VIM 等)并收集一些常见目录(我自己写的评论,所以他们不会假装是真的......):
examples
或samples
在迷你脚本或迷你程序或迷你配置中显示项目的实际用法。scripts
, support
- 缺少脚本/实用程序的包装器或副本,以提供跨环境构建。tools
- 用于配置或调试项目的额外实用程序。contrib
- 用户提供的脚本、配置等...misc
, etc
- 未分类的文件(如果您不知道它的正确位置)。config
, extra
- 不知道...虽然src/
,test/
,build/
,dist/
,lib/
和其他目录命名惯例决定由前卫LANGS /平台/框架等,这似乎目录通用于所有类型的项目。
因此,我为保存项目支持文件的目录寻找命名约定的指南(官方或非官方)。
与常规项目文件最本质的区别在于,这些文件不在项目发布构建中使用,或者在极少数情况下使用。
附注。有人可以争辩说这不是问题。但是我有真正的任务来提交几个脚本(从数据库转储菜单的 sql 脚本,为 web 控制器转储 url 映射的脚本等)并查找应该保存这些文件的目录名......
聚苯乙烯。我努力收集约定:
我需要打印小数字(直方图上的百分比),但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) 看来太阳网址终于破了: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/ - 保留错误号码!
根据 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 任何可执行文件......
我必须使用String Test框架编写测试,其中使用了许多数据库连接。
在测试中,我不需要所有数据源,但Spring希望它们全部注入。
是否有任何标准或众所周知的伪造javax.sql.DataSource实现只是为了满足Spring DI机制?
我学习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) 在注释内部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 = …
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 ×7
bash ×1
build ×1
coding-style ×1
datasource ×1
dump ×1
hibernate ×1
java-8 ×1
jpa ×1
jpql ×1
maven ×1
posix ×1
pretty-print ×1
sh ×1
shell ×1
spring ×1
spring-data ×1
spring-test ×1
testing ×1