0

我正在尝试创建一个通用 InputVerifier 来检查 JComponent 中的数据是否在指定范围内。为此,我使我的泛型类型扩展了 Comparable<> 以确保它可以进行比较。

我正在关注的是以下两件事:

  1. JComponent 没有 getText() 方法,也没有一个子类可以转换为 JTextField 和 JSpinner 等常见组件使用的子类,它们都有不同的获取值的方法。
  2. 我认为我不能指定我的泛型类型 DataType 必须具有特定的函数签名。我试图看看我是否可以强制它具有一个接受单个字符串的构造函数(如 Integer、Double、Float),或者强制 DataType 必须扩展 Integer、Double 或 Float,但我不确定如果 Java 7 泛型可以做到这一点。如果我能做类似的事情会很棒:DataType myData = new DataType(text);

这是我现在的课程。我把它抽象化了,所以子类必须知道返回文本所涉及的 JComponent 的类型,然后如何构建可比较的类型以进行比较。考虑到可能起作用的不同类型的 JComponents 和 Comparable 类型,这可能会导致许多排列。有没有办法消除我上面提到的一个或两个问题?

import javax.swing.InputVerifier;
import javax.swing.JComponent;

public abstract class InputRangeVerifier<DataType extends Comparable<DataType>> extends InputVerifier {

    private DataType m_min;
    private DataType m_max;

    public InputRangeVerifier(DataType min, DataType max) {
        m_min = min;
        m_max = max;
    }

    @Override
    public boolean verify(JComponent component) {
        String componentText = getComponentText();
        DataType comparable = getComparableValue(componentText);

        boolean greaterThanOrEqualToMin = comparable.compareTo(m_min) > 0;
        boolean lessThanOrEqualToMax = comparable.compareTo(m_max) < 0;
        boolean isInRange = greaterThanOrEqualToMin && lessThanOrEqualToMax;

        return isInRange;
    }

    public abstract String getComponentText();
    public abstract DataType getComparableValue(String text);

}
4

0 回答 0