如何在SubscribeTables类中使用Main类的NetworkTableInstance对象inst?
解决NetworkTableInstance跨类复用问题
你完全可以通过对象传递的方式实现,最直接可靠的是用构造方法注入,下面是具体实现步骤和代码示例:
一、构造方法传递实现
1. 改造SubscribeTables类
添加接收NetworkTableInstance的构造方法,并将其保存为类成员变量,后续就能在类内任意方法中使用该对象:
public class SubscribeTables { // 保存传入的NetworkTableInstance对象 private NetworkTableInstance ntInstance; // 构造方法接收外部传入的实例 public SubscribeTables(NetworkTableInstance inst) { this.ntInstance = inst; } // 示例方法:调用isConnected() public void verifyConnection() { boolean connected = ntInstance.isConnected(); System.out.println("NetworkTables连接状态:" + connected); } // 其他需要操作NetworkTables的方法都可以在这里实现 }
2. 在Main类中传递实例
确保你在Main中初始化并配置好inst后,创建SubscribeTables对象时直接传入该实例:
public class Main { public static void main(String[] args) { // 初始化并配置NetworkTableInstance客户端 NetworkTableInstance inst = NetworkTableInstance.getDefault(); inst.startClient4("myClient"); inst.setServerTeam(1234); // 替换为你的服务器地址/队伍号 // 可选:等待连接 inst.waitForConnection(5.0); // 将配置好的inst传递给SubscribeTables SubscribeTables tableSubscriber = new SubscribeTables(inst); tableSubscriber.verifyConnection(); // 测试调用 } }
二、关于之前getter失效的可能原因
你之前的getter没生效,大概率是这两种情况:
- 局部变量问题:Main中初始化的inst是
main方法里的局部变量,而getter返回的是类的成员变量(未初始化,为null) - 未获取正确的Main实例:如果getter是非静态方法,但你在SubscribeTables中没有创建/获取到正确的Main实例,自然拿不到有效对象
相比getter方式,构造方法传递更清晰,耦合度更低,也更符合面向对象的依赖传递原则。
内容的提问来源于stack exchange,提问作者Elo Benc
相关产品推荐
相关产品推荐

