gpt4 book ai didi

java - 为什么我不能从静态方法中调用 new?

转载 作者:行者123 更新时间:2023-12-02 04:20:15 24 4
gpt4 key购买 nike

我有一些实用程序函数已声明为静态,因为它们不会被实例化,仅用于实用程序。我想创建一个可以生成对象的生成器方法,但在相同的静态实用程序上下文中。

public class PeerConnection {

public class _Heartbeat{
protected String beat = "HB_000";
protected String ack = "HB_001";
protected String msg = null;

protected Date beatTime = null;
protected Date ackTime = null;
protected short missedBeats = 0;
protected short MAX_MISS = 3;
}

public _Heartbeat heartbeat = null;
//map of heartbeat objects per Peer connection
public static List<_Heartbeat> Heartbeats = new ArrayList<_Heartbeat>();

public static void GenerateHeartbeat(){
Heartbeats.add(new _Heartbeat());
}

我的推理是,我想从 SendHeartbeat 方法调用它:

   private static int SendHeartbeat(PeerConnection peer){
int acks = 0;
PeerConnection.GenerateHeartbeat();
PeerConnection._Heartbeat hb = peer.Heartbeats.get(peer.Heartbeats.size() - 1);
hb.msg = hb.beat;

while (acks <= 0 && hb.missedBeats < hb.MAX_MISS){
[...]
}
}

我明白为什么静态会以这种方式工作,但我认为必须针对这种情况找到解决方法。

最佳答案

_Heatbeat 不是静态类,因此它的任何实例都显式绑定(bind)到 PeerConnection 类的实例。 IE。要实例化 _Heartbeat,您需要 PeerConnection 类的实例。

一种选择是使 _Heartbeat 成为静态类(即 public static class _Heartbeat,我认为这可能就是您想要的。

另一种选择是像这样一起实例化两者 new PeerConnection().new _Heartbeat() (我在 java 认证考试中看到了这个,但我讨厌它并且从不使用它,所以我可能不会正确记住语法)。

关于java - 为什么我不能从静态方法中调用 new?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32860869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com