小编Mat*_* S.的帖子

为什么Java需要强制转换以将有界类型参数实例化为其上界类?

Java要求将有界类型参数实例化到其上界类以进行强制转换,例如:

<T extends Integer> void passVal (T t) {
    Integer number = 5;
    t = (T) number; // Without cast a compile error is issued
}
Run Code Online (Sandbox Code Playgroud)

T在声明时已经被限制Integer为其子类之一(我知道,没有子类),而且在我看来,任何有界类型参数都只能实例化为其上界类或其子类之一,因此为什么需要演员表?

另外,我知道如果不是通过此方法之外的调用实例化该参数,则不是这种情况,因此请不要提供它作为答案;该问题特定于在其声明的类/方法中实例化的有界类型参数。

java generics bounded-wildcard

7
推荐指数
1
解决办法
115
查看次数

将类型“放置”在类中是什么意思?

我正在阅读有关通用类型的oracles教程,第一段真的让我很头疼。该页面位于https://docs.oracle.com/javase/tutorial/java/generics/types.html。该教程以名为“ Box”的类开始:

public class Box {
private Object object;

public void set(Object object) { this.object = object; }
public Object get() { return object; }
}
Run Code Online (Sandbox Code Playgroud)

其后的一段也是我一生都无法理解的一段:

由于它的方法接受或返回一个Object,因此只要它不是原始类型之一,您就可以随意传递所需的任何内容。在编译时无法验证类的使用方式。代码的一部分可能会将Integer放在框中,并期望从中取出Integer,而代码的另一部分可能会错误地传入String,从而导致运行时错误。

最后一句话对我来说绝对没有意义,而且我已经阅读了该特定页面的其余部分,但仍然无法确切知道他们要说的是什么,感觉就像我错过了课程的很大一部分。将某些东西“放置”在盒子里是什么意思?

我已经尝试了一切,我尝试以一千种不同的方式实例化Box类以使其有意义,它们都导致编译时错误而不是运行时错误。无论我从哪个角度看,我都无法理解这一点,难以理解这意味着什么

java generics

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

Wild FJ论文中类型变量和类型参数的区别?

在 Torgersen 等人 2005 年的Wild FJ论文中,第 2 节和第 3 节的第一段使用了术语“类型参数”。然后3.1节第一句介绍了术语“类型变量”。考虑到讨论的上下文以及谷歌上缺乏信息,我只能猜测“类型变量”是用来专门指代通配符的。我非常确定,这是一篇“开创性”的论文,它导致了 Java 中通配符的实现。

编辑:非常感谢 deduper 为编辑我的问题付出的辛勤工作!

java generics types wildcard type-parameter

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

有没有办法可以调用父类构造函数,该构造函数从没有自己的构造函数的子类中获取参数?

众所周知,父类必须在子类之前构造; 如果父类的构造函数接受参数,则必须显式调用父类的构造函数.我的问题是,如果子类本身没有构造函数,如何调用从子类显式获取参数的父类构造函数?

public class A {
public String text;

public A(String text) {
    this.text = text;
}
}


public class B extends A {
// Now I must call the constructor of A explicitly (other wise I'll get a
// compilation error) but how can I do that without a constructor here?
}
Run Code Online (Sandbox Code Playgroud)

java inheritance constructor super

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