You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java内部类构造提示无外部类可访问实例错误如何修复

报错原因

你遇到的报错是因为Citizen被定义为Adresse的非静态内部类:Java中非静态内部类会隐式持有外部类的实例引用,无法脱离外部类实例被独立实例化,因此直接调用new Citizen()时会抛出该异常:

"No enclosing instance of type Adresse is accessible. Must qualify the allocation with an enclosing instance of type Adresse (e.g. x.new A() where x is an instance of Adresse)."

修复方案

方案1(推荐):将Citizen改为静态内部类

从业务逻辑来看Citizen仅持有Adresse类型的属性,本身不需要依附Adresse实例存在,只需要在Citizen类定义前添加static关键字即可修复问题:

public class Adresse{
    private String rue,ville;
    private int codepostale,numero;

    Adresse(String rue,String ville,int num,int code){
        this.rue=rue;
        this.ville=ville;
        codepostale=code;
        numero=num;
    }
    // 添加static关键字改为静态内部类
    static class Citizen{
        private String nom,prenom;
        private Adresse adr;
        
        Citizen(String nom,String prenom,String ville,String rue,int num,int code)
        {
            this.nom=nom;
            this.prenom=prenom;
            this.adr=new Adresse(rue, ville, num, code);
        }
    }
}

修改后可以直接正常创建Citizen实例:
Adresse.Citizen citizen = new Adresse.Citizen("Doe","John","Paris","Champs Elysees",1,75001);

方案2:保留非静态内部类结构,创建时绑定外部类实例

如果业务要求必须保留非静态内部类的定义,那么创建Citizen实例前需要先实例化Adresse,再通过外部类实例创建内部类实例:

// 先创建外部类实例
Adresse adresse = new Adresse("Champs Elysees","Paris",1,75001);
// 通过外部类实例调用new创建内部类实例
Adresse.Citizen citizen = adresse.new Citizen("Doe","John","Paris","Champs Elysees",1,75001);

内部类构造方法调用外部类构造方法的方式

针对非静态内部类,可以在内部类构造方法的第一行通过super(参数)的形式调用外部类对应的构造方法,示例如下:

class Citizen{
    private String nom,prenom;
    private Adresse adr;
    
    Citizen(String nom,String prenom,String rue,String ville,int num,int code)
    {
        // 第一行调用外部类Adresse的带参构造方法
        super(rue, ville, num, code);
        this.nom=nom;
        this.prenom=prenom;
        // 直接绑定当前关联的外部类实例即可,不需要重新new Adresse
        this.adr = Adresse.this;
    }
}

这种方式下创建的Citizen实例,绑定的外部类实例就是通过super调用构造生成的实例,不需要额外传入或者新建Adresse对象。

内容的提问来源于stack exchange,提问作者Rafik Bouloudene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:45:07