相关疑难解决方法(0)

Java 7中的钻石运算符有什么意义?

java 7中的菱形运算符允许以下代码:

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

但是在Java 5/6中,我可以简单地写:

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

我对类型擦除的理解是这些完全相同.(无论如何,通用都会在运行时删除).

为什么要钻石头呢?它允许哪些新功能/类型安全?如果它没有产生任何新功能,为什么他们将其作为功能提及?我对这个概念的理解是否有缺陷?

java generics diamond-operator java-7

438
推荐指数
5
解决办法
14万
查看次数

如何获取int数字的单独数字?

我有像1100,1002,1022等数字.我想有个别数字,例如第一个数字1100我想要1,1,0,0.

我怎样才能用Java获取它?

java integer modulo

124
推荐指数
10
解决办法
51万
查看次数

返回类型的推断通配符泛型

Java通常可以根据参数推断泛型(甚至在返回类型上,与例如C#相反).

例证:我有一个Pair<T1, T2>只存储一对值的泛型类,可以按以下方式使用:

Pair<String, String> pair = Pair.of("Hello", "World");
Run Code Online (Sandbox Code Playgroud)

该方法of看起来像这样:

public static <T1, T2> Pair<T1, T2> of(T1 first, T2 second) {
    return new Pair<T1, T2>(first, second);
}
Run Code Online (Sandbox Code Playgroud)

非常好.但是,这不再适用于以下需要使用通配符的用例:

Pair<Class<?>, String> pair = Pair.of((Class<?>) List.class, "hello");
Run Code Online (Sandbox Code Playgroud)

(注意显式强制转换以List.class生成正确的类型.)

代码失败,出现以下错误(由Eclipse提供):

类型不匹配:无法转换TestClass.Pair<Class<capture#1-of ?>,String>TestClass.Pair<Class<?>,String>

但是,显式调用构造函数仍然按预期工作:

Pair<Class<?>, String> pair =
    new Pair<Class<?>, String>((Class<?>) List.class, "hello");
Run Code Online (Sandbox Code Playgroud)

有人可以解释这种行为吗?它是按设计的吗?它需要吗?我做错了什么,或者我偶然发现编译器中的设计/错误存在缺陷?

狂野猜测:"捕获#1-of?"似乎暗示通配符由动态编译器填充,使类型为a Class<List>,从而使转换失败(从)Pair<Class<?>, String>Pair<Class<List>, String>.这是正确的吗?有办法解决这个问题吗?


为了完整起见,这里是Pair该类的简化版本:

public final class Pair<T1, T2> {
    public …
Run Code Online (Sandbox Code Playgroud)

java generics bounded-wildcard

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