网上看了,不怎么理解 ,有没有大神来通俗讲解下内部类下面匿名类问题。
public class test {
public static void main(String[] args) throws ClassNotFoundException {
// TODO Auto-generated method stub
Class c=de.class;
Method m[]=c.getDeclaredMethods();
Field f[]=c.getDeclaredFields();
Constructor s[]=c.getDeclaredConstructors();
for(int i=0;i<m.length;i++)
{
System.out.println("方法:"+m[i]);
}
for(int i=0;i<s.length;i++)
{
System.out.println("构造函数:"+s[i]);
}
for(int i=0;i<f.length;i++)
{
System.out.println("属性:"+f[i]);
}
String s2[]={"1","2","3"};
for(String s1:s2){
System.out.println(s1);
}
}
class de{
String name;
int age;
de(){
System.out.println(1111);
}
de(int i){
System.out.println(1111);
}
de(double i){
System.out.println(1111);
}
void fa(int i){
System.out.println(i);
}
}
}
结果:
方法:void foe.test$de.fa(int)
构造函数:foe.test$de(foe.test,double)
构造函数:foe.test$de(foe.test,int)
构造函数:foe.test$de(foe.test)
属性:java.lang.String foe.test$de.name
属性:int foe.test$de.age
属性:final foe.test foe.test$de.this$0
1
2
3
对于非静态类,还记得除了能访问自己的this,还可以访问hosting类的this。这里的this.$0就是这个特殊属性,它指的是包含它的Test.this。把上面的代码改改跑一下就清楚了:
import java.lang.reflect.*;
public class Test {
public static void main(String[] args) {
Class<De> c=De.class;
Field f[]=c.getDeclaredFields();
Test test = new Test();
if (test == test.getDe().getParentThis())
System.out.println("Correct");
try {
Object obj = f[0].get(test.getDe());
if (test == obj)
System.out.println("Correct");
} catch (Exception e) {
}
}
public class De{
private Test getParentThis() {
return Test.this;
}
}
private De getDe() {
if (this.de == null) {
de = new De();
}
return de;
}
private De de;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你好,我是AI助理
可以解答问题、推荐解决方案等
评论
全部评论 (0)