将对象添加到静态集合中以获取静态方法

时间:2013-05-18 18:07:29

标签: java map static

可能是一个愚蠢的问题,但它已经让我疯了几天。 首先,我讲的是嵌入在更大的应用程序中的代码,因此强加了类和方法签名。

所以我的目标是创建一组GC信息,代码如下:

public final class JVMMemStats_SVC {
    public static final void JVMMemStats(IData pipeline) throws ServiceException {
        List<GarbageCollectorMXBean> gcMBeans = ManagementFactory.getGarbageCollectorMXBeans();
        for (GarbageCollectorMXBean gcBean : gcMBeans){ // Loop against GCs
           GC gc = GCs.get(gcBean.getName());
           if( gc != null ){    // This GC already exists

           } else { // New GC
               GCs.put(
                   gcBean.getName(),
                   new GC( gcBean.getCollectionCount(), gcBean.getCollectionTime())
               );
           }
    }

    public class GC {
        public long Cnt, Duration;

        public GC(long cnt, long duration){
            this.set(cnt, duration);
        }

        public void set(long cnt, long duration){
            this.Cnt = cnt;
            this.Duration = duration;
        }
    }

    static Map<String, GC> GCindexes = new HashMap<String, GC>();
}

但是我在编译时遇到以下错误:

non-static variable this cannot be referenced from a static context :
   GCPrev.add( new GC( gcBean.getCollectionCount(), gcBean.getCollectionTime()) );
好吧......我迷路了。谢谢你的任何提示。

劳伦

2 个答案:

答案 0 :(得分:0)

非静态变量,无法从静态方法访问方法。因此,将静态变量更改为非静态或将非静态方法更改为静态并检查。

答案 1 :(得分:0)

您正尝试在non-static静态方法中创建GC内部类JVMMemStats()的实例。

non-static variable this cannot be referenced from a static context :
    GCPrev.add( new GC( gcBean.getCollectionCount(), gcBean.getCollectionTime()) );

上面提到的静态上下文是JVMMemStats()方法。只需将类声明更改为

即可
public static class GC {
     // needs to be static to be instantiated in a static method
}