这是一些使用Java 6编译但未在Java 7中编译的代码的简单示例。
public class Test<T extends Test> {
private final int _myVar;
public Test(int myVar) {
_myVar = myVar;
}
public int get(TestContainer<T> container){
T t = container.get();
return t._myVar;
}
private static class TestContainer<T extends Test> {
private final T _test;
private TestContainer(T test) {
_test = test;
}
public T get(){
return _test;
}
}
}
在Java 7中,它无法在该get(TestContainer<T> container)
方法中编译,并显示以下错误:
错误:_myVar在测试中具有私有访问权限
我不明白为什么它不再编译-
在我看来应该如此。变量t
是类型T
,必须扩展Test
。它试图从class内访问_myVar
实例的字段。Test``Test
确实,如果我将方法更改为get(TestContainer<T> container)
以下方法,则它将编译(没有警告):
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
我有一个Google并在Oracle Bug数据库中进行了搜索,但是在此上却没有找到任何东西。
§4.9
…然后,交集类型与具有空主体,直接超类Ck和直接超接口T1’,…,Tn’的类类型(第8节)具有相同的成员,并在同一包中声明。相交类型出现。
根据我对JLS零件的了解,您的带有类型变量的情况将<T extends Test>
创建以下交集:
package <the same as of Test>;
class I extends Test {}
因此,当您访问类型的成员时,T
您实际上会访问相交类型的成员I
。由于私有成员永远不会被子类型继承,因此访问此类成员会因编译错误而失败。另一方面,由于交集是事实,因此允许访问package-
private(默认)和受保护成员。
…在出现相交类型的同一包中声明。
本文向大家介绍Python中设置变量访问权限的方法,包括了Python中设置变量访问权限的方法的使用技巧和注意事项,需要的朋友参考一下 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性: 如果要让内部属性不被外部访问,可以把属性
本文向大家介绍java类访问权限与成员访问权限解析,包括了java类访问权限与成员访问权限解析的使用技巧和注意事项,需要的朋友参考一下 在写代码的时候有个问题:包内定义了一个接口类,另外一个包要实现它,这里采用接口隔离与依赖倒置原则,将两个包的依赖关系倒置过来。但是,这里就遇到了一个问题,实现类采用工厂模式来实例化,所以实现类就不想暴露给包外,但是实现类还要实现public接口。所以这里有产生了一
问题内容: 我想在docker上运行jenkins并更改用户访问权限,以便可以读取SSH密钥并访问git。这是dockerfile的示例 生成时输出成功,访问已更改! 但是,当我进入访问设置为默认时,chmod无法正常工作 知道为什么这种行为吗? 问题答案: 发生这种情况是因为在基本映像中进行了定义。您可以通过3种方式中的任何一种来解决此问题 您可以在构建之前在主机上修复权限,它应该可以工作。 您
我的剧本 回应
问题内容: 我一直在寻找一些Java基本集合(的宝库,fastutil,HPPC)和我已经注意到,类变量有时声明为图案的局部变量。例如: 我已经进行了一些基准测试,看来这样做时速度 稍 快,但是为什么会这样呢?我试图了解如果注释掉函数的前三行,那么Java将有何不同之处。 注意:这似乎与此问题相似,但这是针对c ++的,并且没有解决为什么声明它们的原因。 问题答案: 此处的关键字是红色鲱鱼。之所以
问题内容: 在内部类中,可以访问外部类的变量,但不能访问方法的局部变量。我了解了无法访问方法的局部变量的部分,但我想知道为什么外部类变量可以访问? 我的理解是,由于内部类与外部类绑定,因此只要父级可用,子级就可以访问其父级变量。我对么? 问题答案: 假设您的外部类在内部类的范围内(非静态)被称为,以获取该字段。 例如, 其中Outer是类的名称,并标识该字段。 您也可以直接抓取它,但是如果由于阴影