1

静的メインで非静的メソッドを使用したいのですが、できません。私はこの問題を知っていますが、INotificationObserver を使用しているため、registerObserver を静的にすることはできません。だから私は私の問題を解決することができました。

どうすればこの問題を解決できますか?? ありがとう 。

非静的変数 これは静的コンテキストから参照できません

テスト

   public class PushTest implements INotificationObserver{    
   NotificationService ns = NotificationService.getInstance(); 

    public static void main(String[] args) {         
        try {                        
            ns.registerObserver(this); // How can i register ???

インターフェース

public interface INotificationSubject {
    public  void registerObserver(INotificationObserver o);
    public void removeObserver(INotificationObserver o);
    public void notifyObserver(PushedNotification notification);
}

*通知サービス *

public class NotificationService implements  INotificationSubject{

    protected static final Logger logger = Logger.getLogger(NotificationService.class);
    private volatile static NotificationService uniqueFactory;
      private ArrayList observers;

    private NotificationService() {
      observers = new ArrayList();
    }
    public static NotificationService getInstance() {
        if (uniqueFactory == null) {
            synchronized (NotificationService.class) {
                if (uniqueFactory == null) {
                    uniqueFactory = new NotificationService();
                }
            }
        }
        return uniqueFactory;
    }

    public static INotification GetNotificationObject(DeviceTypes Types) {
        INotification messageSender = null;

        if (Types == Types.IOS) {
            messageSender = new IosNotification();
        }

        return messageSender;
    }

    public void registerObserver(INotificationObserver o) {
        observers.add(o);
    }

    public void removeObserver(INotificationObserver o) {
        int i =
                observers.indexOf(o);
        if (i >= 0) {
            observers.remove(i);
        }
    }

    public void notifyObserver(PushedNotification notification) {
        for (int i = 0; i < observers.size(); i++) {
            INotificationObserver observer = (INotificationObserver) observers.get(i);
            observer.update(notification);
        }
    }

    public void messageSendInfo(PushedNotification notification) {
        notifyObserver(notification);
    }

    public void showSentInfo(PushedNotification notification) {
        messageSendInfo(notification);
    }
}
4

2 に答える 2

2

インスタンスが必要です:

INotificationObserver ino = new PushTest();
ns.registerObserver(ino);

そのため、属性は必要ありませんns

于 2013-03-15T12:47:06.973 に答える
0

このための一般的な解決策は、mainメソッドでクラスを初期化することです。

public class PushTest implements INotificationObserver{
    NotificationService ns = NotificationService.getInstance();

    public static void main(String[] args) {         
        PushTest pushTest = new Pushtest();
        ...

などなど

于 2013-03-15T12:47:03.127 に答える