如果我在运行时有一个Class实例,我可以得到它的byte []表示吗?我感兴趣的字节是Class文件格式,这样它们就是[ClassLoader.defineClass] [3]的有效输入.
[3]:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String ,byb [],int,int)
编辑:我已经接受了一个getResourceAsStream答案,因为它非常简单,大部分时间都可以工作.ClassFileTransformer似乎是一个更强大的解决方案,因为它不需要从.class文件加载类; 例如,它将处理网络加载的类.用这种方法可以通过几个环节跳过,但我会牢记在心.谢谢大家!
此StackOverflow答案具有KDiff3的图像,突出显示行内差异.有人知道一个工具可以在命令行上显示相同的(例如,通过颜色)吗?
想到这一点的另一种方法是想要在补丁文件中区分每个差异.
为什么下面的第2行编译?它(似乎)没有给出所需的构造函数arg.
class F(x: => Unit) {}
new F // Compiles (strange)
def f(x: =>Unit) = ()
f // Does not compile (good)
Run Code Online (Sandbox Code Playgroud)
这种特殊情况是否允许糖?你能指出关于这个问题的文档吗?我正在使用Scala 2.9.0.
例如,当使用Preconditions.checkArgument时,错误消息是否应该反映通过案例或有问题的检查失败的情况?
import static com.google.common.base.Preconditions.*;
void doStuff(int a, int b) {
checkArgument(a == b, "a == b");
// OR
checkArgument(a == b, "a != b");
}
Run Code Online (Sandbox Code Playgroud) 我将首先用我的用例快速激发问题.我的库需要将Java异常分类器暴露给它插入的框架.例如:
enum Classification { FATAL, TRANSIENT, UNKNOWN }
Classification classify(Throwable t) {
if (t instanceof MyTransientException)
return Classification.TRANSIENT;
else if (t instanceof MyFatalException)
return Classification.FATAL;
else
return Classification.UNKNOWN;
}
Run Code Online (Sandbox Code Playgroud)
有时,由于我无法控制的原因,传递的异常是我感兴趣的一个包装器所以我想搜索它的原因链.我最初的想法是:
Classification classify(Throwable t) {
if (t == null)
return Classification.UNKNOWN;
if (t instanceof MyTransientException)
return Classification.TRANSIENT;
else if (t instanceof MyFatalException)
return Classification.FATAL;
else
return classify(t.getCause());
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果传递的异常在其因果链中有一个循环,这可能导致无限递归.这样的异常很可能不会被传递,并且如果创建了这样的异常,可能会在系统的其他地方出现错误,但我对我的库负责生产的可能性感到非常不舒服如果发生中断.Throwable的API和javadoc没有明确禁止这种可能性,因为循环在因果链中本质上是无意义的.
我注意到Guava有一个@Beta方法来提取因果链Throwables.getCausalChain,但它的实现容易受到同样的问题 - 它最终会抛出一个OOME.
我打算使用身份哈希集来检测周期并降低风险,但我想听听别人如何看待这个问题.你觉得我过度防守吗?你会怎么做?
对于Guava的ImmutableList.Builder有什么线程安全保障?javadocs没有说.
我正在编写GC友好代码来读取并向用户返回一系列byte[]消息.在内部我重复使用ByteBuffer它,这意味着我将在大多数时间重复返回相同的byte[]实例.
我正在考虑编写警示javadoc并将其暴露给用户作为Iterator<byte[]>.AFAIK它不会违反Iterator合同,但如果他们这样做Lists.newArrayList(myIterator)并且在每个位置回到List人口中,那么用户肯定会感到惊讶byte[]!
问题:对于可能变异并返回相同对象来实现接口的类,这是不好的做法吗?Iterator
两个小调:
我正在使用Guava,AbstractIterator因此remove()并不是真正值得关注的问题.
在我的用例中,用户就是我,这个类的可见性将受到限制,但我已经尝试过这个问题,通常可以更广泛地应用.
更新:我接受路易斯的答案,因为它的票数比基思多3倍,但请注意,在我的用例中,我打算采用我留下的代码来评论基思对生产的回答.
Netbeans有一个很好的"Step Into"功能,如果在同一行上有多个方法调用,你可以使用箭头键选择你的意思.您可以在这个新的和值得注意的页面上看到屏幕截图和说明.
我想知道,Eclipse有相同的功能吗?我看到Eclipse确实有Step Filtering,但那不一样.我不喜欢F5,F7,F5 ......
此问题的范围仅限于HotSpot代.有没有办法以编程方式找出特定实例所在的生成.数据如:
任何技术(例如,BTrace,JVMTI)都可以工作,只要我可以这样做:
Object x = new Object();
HotSpotGenerationInfo info = HotSpotGenerationUtil.getInfo(x);
Run Code Online (Sandbox Code Playgroud)
乞丐不能挑肥拣瘦,但最好我也能学到当目标实例正在从一代转移到另一个在它发生的那一刻(即事件回调基础-在时延和轮询开销隐含不感兴趣)
对没有理由的只是说"不"的答案不感兴趣:)
我正在创建一个多模块项目,用于构建许多其他相关项目.其中一些项目也是多模块项目,在某些情况下,它们构建相同的子项目.Maven对我大吼大叫,但这是有意的,无论如何我还是想建立它.
有没有人解决这个问题?谢谢.