是否有一个库将以递归方式转储/打印对象属性?我正在寻找类似于Firebug中的console.dir()函数的东西.
我知道commons-lang ReflectionToStringBuilder但它没有递归到一个对象.即,如果我运行以下内容:
public class ToString {
public static void main(String [] args) {
System.out.println(ReflectionToStringBuilder.toString(new Outer(), ToStringStyle.MULTI_LINE_STYLE));
}
private static class Outer {
private int intValue = 5;
private Inner innerValue = new Inner();
}
private static class Inner {
private String stringValue = "foo";
}
}
Run Code Online (Sandbox Code Playgroud)
我收到:
ToString $ Outer @ 1b67f74 [intValue = 5
innerValue = ToString $ Inner @ 530daa]
我意识到在我的例子中,我可以覆盖Inner的toString()方法,但在现实世界中,我正在处理我无法修改的外部对象.
在PHP中是否有一种方法可以使用"会话外"变量,这些变量不会在每个连接处加载/卸载,就像在Java服务器中一样?
请原谅我缺乏准确性,我不知道如何以正确的方式写它.
主要想法是这样的事情:
<?php
...
// $variablesAlreadyLoaded is kind of "static" and shared between all PHP threads
// No need to initialize/load/instantiate it.
$myVar = $variablesAlreadyLoaded['aConstantValueForEveryone'];
...
?>
Run Code Online (Sandbox Code Playgroud)
我已经做过这样的使用shmop和其他奇怪的事情,但如果有一个"干净"的方式来做"纯PHP"而不使用缓存系统(我想到APC,Redis ......),也没有数据库.
编辑1:
由于人们(感谢他们花时间陪我)以同样的方式回答我的会话,我添加了一个我错过了写的约束:没有会话请.
编辑2:
似乎唯一的PHP本机方法是共享内存(shmop)和命名管道.我将使用托管方式访问共享对象,不介意内存管理(共享内存块大小)或系统问题(管道).
然后,我在网上浏览了一个PHP模块/库,它提供了执行此操作的函数/方法:我什么也没找到.
编辑3:
后在路上的几个研究中指出@KFO,看来该putenv/ setenv不作出处理对象(我会避免序列化).因此,它解决了诸如字符串或数字之类的短"事物"的问题,但不解决更大的/ comples对象的问题.
使用"env way"和另一种处理更大对象的方法将是不相干的,并增加了代码和维护的复杂性.
编辑4:
发现这个:DBus(GREE Lab DBus),但我没有工具在工作中测试它.有人测试了吗?
我对每一个建议持开放态度.
谢谢
编辑5("答案"):
由于DBus不是我正在寻找的(需要安装第三方模块,没有"严重"的应用证据),我现在正在使用已经证明其可靠性的Memcache(关注@PeterM评论,见下文).
php persistence share shared-memory inter-process-communicat
有谁知道在控制台模式下“渲染”图或至少树的意思(在控制台中绘制)?
通过以ASCII模式绘制一些图形,我可以在很长的过程结束时绘制小图,以便对过程中收集到的某些统计信息有一个令人讨厌的乐趣。
我很高兴发现一个可以做到这一点的库,并且我将使该过程保持100%java,没有shell hack或第三方软件。
-编辑
@lbalazscs和@Fortega给出了有趣的答案,但是我的问题的背景是要知道它是否存在这样的库,我将添加一些我第一次错过的细节:
输出应该能够显示树,二叉树(此处通过@lbalazscs链接),还可以显示简单的图形,例如条形图等。
我将让这个问题“未回答”一段时间,如果没有可能的答案,@ lbalazscs将会指出要点;)
我会在 Cmder 中的另一个别名中使用一个别名。
我对一个大命令有一个很好的别名(第一个),我会在另一个命令(第二个)中使用它:
mergelocdist=git fetch origin --prune --verbose && git checkout $1 && git merge --ff-only --verbose origin/$2 || git rebase --preserve-merges --verbose origin/$2
mm=mergelocdist master master
Run Code Online (Sandbox Code Playgroud)
别名位于 Cmderaliases文件中,我使用的是 Windows 7 x64。
该话题已经在这个问题中提出过,目前还没有回复。
如果你回答我,请也回答这个人:)
发现这个,似乎有帮助,但我不知道如何。
我遇到了一个问题,我正试图实施"两级"演员.
下面是显示我想要做的简化代码:
public class Array2D<T>
{
private T[][] _array;
....
public T get( int x , int y )
....
public void set( T o , int x , int y )
}
Run Code Online (Sandbox Code Playgroud)
直到那里,没有问题.
我正在尝试扩展这个类,例如我可以在getter和setter中封装SoftReferences的使用:
public class Array2DSoftRefs<T> extends Array2D<SoftReference<T>>
{
public T get( int x , int y )
{
return super.get(x,y).get(); // get the array element, then the SoftReference contents
}
....
public void set( T o , int x , int y )
{
super.set( new SoftReference<T>(o) …Run Code Online (Sandbox Code Playgroud) 好 !谢谢你找到了答案.我接受了副本,因为它正是我想要的,并且很好地解释了.感谢大家的回答:)
有没有人对如何在Java中创建自定义异常处理程序有任何建议或想法?
我的意思是修改代码未捕获 的标准Java异常处理方法Exceptions,Errors并且更通用Throwable.
PHP的方法是定义一个自定义的异常处理程序,但似乎在Java中没有这种方法.
我将实现的目标是在Java错误处理过程中插入自定义进程:
Uncatched Throwable - >由JVM处理"我的代码外" - >我的自定义进程 - >如果需要,恢复JVM标准异常处理
感谢所有的想法或建议!
有没有办法将此处理程序生成所有线程而不在每个线程中明确声明?我在这里为这个话题开了一个新问题.
java ×5
alias ×1
charts ×1
cmder ×1
console ×1
dump ×1
exception ×1
generics ×1
graphics ×1
overriding ×1
persistence ×1
php ×1
properties ×1
reflection ×1
share ×1
tostring ×1
type-erasure ×1