如何在Java中实现抽象变量功能

时间:2013-08-23 22:20:30

标签: java swing interface abstract

我正在尝试创建一个extends另一个类(JFrame)的自定义类,但强制在实现时分配某个变量(我希望我的应用程序中的每个JFrame都有“屏幕ID”)。但是,Java没有抽象变量。我也无法弄清楚如何制作扩展JFrame的界面。这个真的让我头晕目眩= D

类代码看起来类似于:

public interface CustomFrame extends javax.swing.JFrame {
    public abstract int screen_id;
}

CustomFrame的实现看起来像这样:

public class NewFrame implements CustomFrame {
    public int screen_id = 5;
    NewFrame() {
        setVisible(true);
        // etc...
    }
}

这个问题对任何人都有意义吗?我知道我的目标是什么,我只是失去了试图在我的大脑中解决它....

2 个答案:

答案 0 :(得分:0)

创建一个外部FrameID生成器,在每次调用时生成一个新ID(只是一个实现为singleton的简单示例:no synch或generic return type等):

class FrameIDGenerator {
  private static int nextID = 0;
  private FrameIDGenerator(){}
  private static FrameIDGenerator instance = null;

  public final static FrameIDGenerator getInstance() {
    if(null == instance) instance = new FrameIDGenerator();
    return instance;
  }

  public int getNextID() {
    return ++nextID;
  }
}

答案 1 :(得分:0)

根据我的理解,它是第三方(不是JFrame本身)需要这个号码。我不认为强迫JFrame(已经有很多顾虑)加入这个负担是个好主意。

请考虑保留外部IdentityHashMap<JFrame,Integer>以存储此信息的替代方法。