首页 > Java > java教程 > 正文

使用公共接口解决Java中受保护嵌套类的列表问题

碧海醫心
发布: 2025-10-01 16:19:00
原创
138人浏览过

使用公共接口解决java中受保护嵌套类的列表问题

在Java中,当需要在另一个包中的类的方法中创建受保护嵌套类型的列表时,直接引用受保护的嵌套类可能会遇到访问限制。一种有效的解决方案是创建一个公共接口,并让嵌套类实现该接口。这样,就可以通过引用该公共接口来创建列表,从而绕过访问限制。

问题背景

假设我们有一个类SomeClass,其中包含一个受保护的嵌套类Nested。现在,我们想在另一个包中的类MyClass的方法中创建一个Nested类型的列表。由于Nested是受保护的,直接引用它可能会导致编译错误

解决方案:使用公共接口

立即学习Java免费学习笔记(深入)”;

  1. 创建公共接口: 在SomeClass类所在的包中创建一个公共接口,例如NestedInterface。该接口定义了Nested类需要实现的方法。
// SomeClass.java
package stuff;

public class SomeClass {

  public interface NestedInterface {
    int getX();
  }

  protected class Nested implements NestedInterface {
    int x;
    public Nested setX(int arg) {
      x = arg;
      return this;
    }
    public int getX() {
      return x;
    }
  }

  public Nested make(int x) {
    return new Nested().setX(x);
  }
}
登录后复制
  1. 让嵌套类实现接口: 让Nested类实现NestedInterface接口。
// SomeClass.java
package stuff;

public class SomeClass {

  public interface NestedInterface {
    int getX();
  }

  protected class Nested implements NestedInterface {
    int x;
    public Nested setX(int arg) {
      x = arg;
      return this;
    }
    public int getX() {
      return x;
    }
  }

  public Nested make(int x) {
    return new Nested().setX(x);
  }
}
登录后复制
  1. 修改make()方法的返回类型: 将make()方法的返回类型更改为NestedInterface。
// SomeClass.java
package stuff;

public class SomeClass {

  public interface NestedInterface {
    int getX();
  }

  protected class Nested implements NestedInterface {
    int x;
    public Nested setX(int arg) {
      x = arg;
      return this;
    }
    public int getX() {
      return x;
    }
  }

  public NestedInterface make(int x) {
    return new Nested().setX(x);
  }
}
登录后复制
  1. 在MyClass中使用接口创建列表: 在MyClass中,可以使用NestedInterface来创建列表。
// MyClass.java
package project;

import java.util.List;
import java.util.ArrayList;
import stuff.SomeClass;
import stuff.SomeClass.NestedInterface;

public class MyClass {
  public SomeClass instance;

  public List<NestedInterface> method() {
    List<NestedInterface> list = new ArrayList<>();
    list.add(instance.make(1));
    list.add(instance.make(2));
    return list;
  }
}
登录后复制

完整代码示例

AI建筑知识问答
AI建筑知识问答

用人工智能ChatGPT帮你解答所有建筑问题

AI建筑知识问答22
查看详情 AI建筑知识问答
// SomeClass.java
package stuff;

public class SomeClass {

  public interface NestedInterface {
    int getX();
  }

  protected class Nested implements NestedInterface {
    int x;
    public Nested setX(int arg) {
      x = arg;
      return this;
    }
    public int getX() {
      return x;
    }
  }

  public NestedInterface make(int x) {
    return new Nested().setX(x);
  }
}
登录后复制
// MyClass.java
package project;

import java.util.List;
import java.util.ArrayList;
import stuff.SomeClass;
import stuff.SomeClass.NestedInterface;

public class MyClass {
  public SomeClass instance;

  public List<NestedInterface> method() {
    List<NestedInterface> list = new ArrayList<>();
    list.add(instance.make(1));
    list.add(instance.make(2));
    return list;
  }
}
登录后复制

注意事项

  • 这种方法需要在SomeClass中添加一个公共接口。如果不能修改SomeClass,则此方法不适用。
  • 使用接口可以隐藏Nested类的具体实现细节,从而提高代码的灵活性和可维护性。
  • 这种模式在Java标准API中被广泛使用,例如java.util.List和java.util.ArrayList。

总结

通过创建一个公共接口,并让受保护的嵌套类实现该接口,我们可以有效地解决在另一个包中创建受保护嵌套类列表的问题。这种方法不仅可以绕过访问限制,还可以提高代码的灵活性和可维护性。

以上就是使用公共接口解决Java中受保护嵌套类的列表问题的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号