我有一些我已声明为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
我得到了为什么静态以这种方式工作的概念,但我认为必须解决这种情况。
答案 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){
[...]
}
}