为什么我不能在静态方法中调用new?

时间:2015-09-30 08:00:37

标签: java methods static

我有一些我已声明为method before sending the image to the client and的实用程序函数,因为它们不会被实例化,仅用于实用程序。我想创建一个可以生成对象的生成器方法,但是在同一个static实用程序上下文中。

static

我的理由是,我想用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

我得到了为什么静态以这种方式工作的概念,但我认为必须解决这种情况。

3 个答案:

答案 0 :(得分:2)

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

一个选项是让_Heartbeat成为静态类(即public static class _Heartbeat,我认为这可能就是你想要的。

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

答案 1 :(得分:0)

您需要Peer类的实际对象来实例化内部类,因为此类属于对象。只是那样......

答案 2 :(得分:0)

Documentation : nested classes

我认为你的问题更多是关于嵌套类而不是静态内容。 回到凯撒什么是凯撒:A realy good answer to your problem here

所以在你的情况下你有两个选择:

 public static class _Heartbeat{ ... }

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

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

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