说我有以下代码:
class Outer {
int n;
class Inner {
}
}
Inner类型的对象是否可以访问其外部对象的实例变量n? (当我说它的时候,我的意思是它与之关联的外部对象。)我理解在内部类的方法中,你可以访问外部类实例变量,也可以访问体内(例如,Inner的实例变量可以初始化为外部的instnace变量的值,但是可以更直接地访问外部实例变量吗?例如,如果inner是Inner类型的对象,那么在给定上面的代码的情况下是否有类似inner.n的东西?
很抱歉文本块:基本上,如果inner是Inner类型的对象,是否有类似inner.n的内容给出上面的代码?
答案 0 :(得分:2)
不确定。非静态内部类以允许它们访问相应外部类中的任何变量的方式生成(这是相当一些安全性问题的原因)。非静态内部类的实例只能在外部类的给定实例中生成,并且包含对外部类的引用,允许它们访问外部类的任何变量。
有关此主题的更多信息,请阅读java语言参考。
答案 1 :(得分:0)
Inner类型的对象是否可以访问其外部对象的实例变量n?
是的,您也可以访问该类的其他实例的字段,即使它们是私有的。
我理解在内部类的方法中,您可以访问外部类实例变量,也可以访问主体内部(例如,Inner的实例变量可以初始化为Outer的instnace变量的值),但它是否可能更直接访问外部实例变量?例如,如果inner是Inner类型的对象,那么在给定上面的代码的情况下是否有类似inner.n的东西?
您无法从另一个类访问Inner类可见的字段。除非字段是公共字段或可通过普通访问修饰符访问,否则只有内部和外部类可以访问它们。
基本上,如果inner是Inner类型的对象,那么在给定上面的代码的情况下是否有类似inner.n的内容?
Inner没有名为float dummy(ulong idx, float4 dir, float4 up, float fov) {
return idx + length(dir - up) + fov;
}
kernel void vexcl_vector_kernel(
ulong n,
global float * prm_1,
ulong prm_2,
float4 prm_3,
float4 prm_4,
float prm_5
)
{
for(ulong idx = get_global_id(0); idx < n; idx += get_global_size(0))
{
prm_1[idx] = dummy( (prm_2 + idx), prm_3, prm_4, prm_5 );
}
}
的字段,因此即使通过反射也无法使用该名称访问它。您可以做的是访问内部类中的n
,并且您可以使用反射来获取Outer类的实例并获取它的Outer.this.n
字段。