相关疑难解决方法(0)

什么是原始类型,为什么我们不应该使用它?

问题:

  • 什么是Java中的原始类型,为什么我经常听说不应该在新代码中使用它们?
  • 如果我们不能使用原始类型,它有什么替代方案,它是如何更好的?

java generics raw-types

617
推荐指数
13
解决办法
20万
查看次数

为什么不能在匿名内部类上使用菱形推断类型?

在Java 7及更高版本中,diamond可用于正常推断类型,因此没有问题:

List<String> list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

但是,对于像这样的匿名内部类,它不能:

List<String> st = new List<>() { //Doesn't compile

    //Implementation here

}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?从逻辑上讲,在这种情况下,我可以将类型推断为String.这个决定的逻辑原因是,在匿名内部类中实际上不能推断出类型,还是由于其他原因而省略了?

java type-inference java-7

20
推荐指数
2
解决办法
7635
查看次数

Java 7钻石运营商:为什么难以实施?

我观看了Oracle OTN虚拟事件:Java SE和JavaFX 2.0(2012年2月28日),在谈到新的钻石操作员(那Map<String, List<String>> myMap = new HashMap<>();件事)时,发言者提到它并不像人们想象的那样简单,因为它不是简单的令牌替换.

我的问题是为什么?为什么不能简单地从变量声明中取出字符串并将其放入菱形运算符中?

java diamond-operator java-7

16
推荐指数
1
解决办法
1648
查看次数

编译错误:"'<>'不能与匿名类一起使用"

我非常想写这个:

Lists.transform(vals,
    new Function<>() {
        public List<ValEntry> apply(Validator<? super T> input) {
            return input.validate(value);
        }
    });
Run Code Online (Sandbox Code Playgroud)

...比这个:

Lists.transform(vals,
    new Function<Validator<? super T>, List<ValEntry>>() {
        public List<ValEntry> apply(Validator<? super T> input) {
            return input.validate( value );
        }
    });
Run Code Online (Sandbox Code Playgroud)

但Java编译器给我以下错误消息:

'<>' cannot be used with anonymous classes
Run Code Online (Sandbox Code Playgroud)

有这个根本原因吗?或者刚刚跳过JDK 7中的功能,也许它们是在8中完成的?

java java-7

15
推荐指数
1
解决办法
3197
查看次数

这种原始类型分配是否类型安全?List <T> = new ArrayList();

我有一些像这样的代码:

@SuppressWarnings({"unchecked", "rawtypes"})
List<String> theList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

这种类型安全吗?我认为这是安全的,因为我没有将原始类型分配给其他任何东西.我甚至可以证明它在我打电话时执行类型检查add:

theList.add(601); // compilation error
Run Code Online (Sandbox Code Playgroud)

我读过"什么是原始类型,我们为什么不使用它?" 但我认为它不适用于此,因为我只使用原始类型创建列表.之后,我将其分配给参数化类型,那么可能出现什么问题?

还有,这个怎么样?

@SuppressWarnings({"unchecked", "rawtypes"})
List<String> anotherList = new ArrayList(theList);
Run Code Online (Sandbox Code Playgroud)

java generics raw-types type-safety

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