小编Gee*_*eek的帖子

什么是标量类型,为什么将未经检查的强制转换抑制为数组类型而不是标量类型风险更大?

来自Effective Java Item 26 偏好通用类型

在所有其他条件相同的情况下,将未经检查的强制转换抑制为数组类型而不是标量类型风险更大,这表明第二种解决方案.但是在一个比Stack更实际的泛型类中,你可能会在代码中的许多点读取数组,因此选择第二个解决方案需要多次转换为E而不是单个转换为E [],这就是为什么第一种溶液更常用[Naftalin07,6.7].

作者scalar type在这里是什么意思,他想在这里传达什么?什么是选项1被认为比选项2更危险?

代码 :

// The elements array will contain only E instances from push(E).
// This is sufficient to ensure type safety, but the runtime
// type of the array won't be E[]; it will always be Object[]!
@SuppressWarnings("unchecked") 
public Stack() {
  elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];
}
Run Code Online (Sandbox Code Playgroud)

VS

// Appropriate suppression of unchecked warning
public E pop() {
  if (size == 0)
    throw new EmptyStackException();
  // push requires elements …
Run Code Online (Sandbox Code Playgroud)

java generics effective-java

4
推荐指数
2
解决办法
3444
查看次数

如何解释可选JavaScript参数的文档

文档中addEventListener我看到以下模式:

target.addEventListener(type, listener[, useCapture]);
Run Code Online (Sandbox Code Playgroud)

现在我明白这useCapture是一个可选参数.为什么[然后在逗号(,)之前启动,而不是在参数后面的逗号后面listener[]除了useCapture可选的事实之外,实际建议的封闭对是什么?我还在jQuery文档中看到了类似的文档模式,例如on ()方法文档.

.on( events [, selector ] [, data ], handler(eventObject) )
Run Code Online (Sandbox Code Playgroud)

javascript jquery

4
推荐指数
1
解决办法
2112
查看次数

Emacs相当于Vim的单词运动和更改内嵌单词

在Emacs中我可以通过使用M-f和前进和后退一个词M-b但是如果我必须向前或向前三个单词,我需要重复前面的三次,这似乎是不优雅的.在Vim中Emacs相当于单词运动概念是什么?例如,在Vim中2w,2b当我处于命令模式时,我可以通过发出和向后发送两个单词.

  1. Emacs中用于在单词之间移动(每次多个)的等效命令是什么?
  2. 其实我想去特定的词并改变它.在Vim中,我可以通过ciw(更改内联单词)来完成此操作.Emacs中的等效命令是什么?

vim emacs editing

4
推荐指数
1
解决办法
1009
查看次数

实现继承在java.sql.Timestamp的javadoc中意味着什么?

来自java.sql.Timestamp类JavaDoc(强调我的)

由于Timestamp类和上面提到的java.util.Date类之间存在差异,因此建议代码不要将Timestamp值一般视为java.util.Date的实例.Timestamp和java.util.Date之间的继承关系实际上表示实现继承,而不是类型继承.

实现继承而不是类型继承是什么意思?这是HAS-A与IS-A的案例吗?

java sql inheritance timestamp jdbc

4
推荐指数
1
解决办法
83
查看次数

"词"在计算机算法分析中的意义

我正在阅读"算法导论",第三版.在" 分析算法 " 部分下面写着:

我们还假设对每个数据字的大小进行限制.例如,当使用大小为n的输入时,我们通常假设整数由c lg n位表示,对于某些常数c> = 1.我们要求c> = 1,以便每个单词可以保存n的值,使我们能够索引单个输入元素,并且我们将c限制为常量,以便单词大小不会任意增长.

这里"单词"这个词有什么意义?这是用"单词"表示数据的标准吗?

language-agnostic algorithm clrs

3
推荐指数
1
解决办法
200
查看次数

未经检查的投射由FindBugs抱怨

请考虑以下代码:

 public void broadcast(FacesEvent event)
    throws AbortProcessingException {

    if(!(event instanceof WrapperEvent)) {
      super.broadcast(event);
      return;
    }

    // Sets up the correct context and fire our wrapped event.
    GridWrapperEvent revent = (GridWrapperEvent)event; // FindBugs is complaining here 
    int oldRowIndex = getRowIndex();
    int oldColumnIndex = getColumnIndex();
    boolean oldClientIdRewritting = clientIdRewritting;
    setClientIdRewritting(revent.isClientIdRewritting());

    setActiveCell(revent.getRowIndex(), revent.getColumnIndex());

    FacesEvent rowEvent = revent.getFacesEvent();
    rowEvent.getComponent().broadcast(rowEvent);
    setActiveCell(oldRowIndex, oldColumnIndex);
    setClientIdRewritting(oldClientIdRewritting);
  }
Run Code Online (Sandbox Code Playgroud)

FindBugs抱怨注释行.我能做些什么吗?这就是FindBugs所说的:

未选中/未确认的 强制转换此未强制转换,并非所有类型的实例都可以强制转换为其强制类型.确保您的程序逻辑确保此强制转换不会失败.

java findbugs

3
推荐指数
1
解决办法
8368
查看次数

理解有关Class的FindBugs警告不会覆盖超类中的equals

根据Josh Bloch在Java中的说法:

除非您愿意放弃面向对象抽象的好处,否则无法扩展可实例化的类并在保留equals合同的同时添加值组件.

因此,这里是我的情况下,我有一类Foo是已经覆盖equals()hashcode()通过IntelliJ IDEA的实现.现在我有另一个类FooChild扩展Foo并为'Foo`增加了几个字段.现在FindBugs抱怨FooChild:

类不会覆盖超类中的equals此类扩展一个定义equals方法并添加字段的类,但不定义equals方法本身.因此,此类的实例上的相等性将忽略子类的标识和添加的字段.确保这是预期的,并且您不需要覆盖equals方法.即使您不需要重写equals方法,也可以考虑覆盖它,以便记录子类的equals方法只返回调用super.equals(o)的结果这一事实.

我的问题是" 这个类的实例上相等是什么意思会忽略子类的身份?我理解忽略添加字段的部分,因为还没有equals()为它们编写方法.

java equals hashcode intellij-idea

3
推荐指数
1
解决办法
3824
查看次数

关于Java内存泄漏的基础知识

我读到Java是按值传递的.所以我们假设我们有这个代码,并说它的HashMap somehashMap寿命比foo.所以foo不允许被垃圾收集,即使它已经完成它的工作只是因为我们把foo放在Map中然后忘了从它中删除.现在按照我链接到的帖子中的答案的逻辑我们实际上是将方法的引用副本传递foo给方法put()吗?在这种情况下,foo放入HashMap应该不会阻止它被垃圾收集.你能帮我理解这里发生了什么吗?我到底错过了什么?

 public void someMethod(){
     Foo foo  = new Foo();
     somehashMap.put(fooKey,foo); 
  }
Run Code Online (Sandbox Code Playgroud)

java memory-leaks

3
推荐指数
4
解决办法
5531
查看次数

左移操作员如何保留标志?

查看了这个问题,以了解为什么在包括Java在内的大多数语言中都没有算术左移运算符.但是接下来我们如何处理负整数,因为左移会将它抛弃.例如-2 ^ 5,其结果应为负数.

java bit-manipulation bit-shift bit

3
推荐指数
1
解决办法
1697
查看次数

如果使用obfusaction,为什么使用反射单元测试私有方法会失败?

关于单元测试私有方法和字段,我一直在讨论这个问题,这个答案说它可以通过反射机制来完成.但是有一种说法是在混淆的情况下它会失败.为什么会这样?

java junit unit-testing

3
推荐指数
1
解决办法
124
查看次数