如何在Java中创建泛型类,但限制可以使用的类型?

如何在Java中创建泛型类,但限制可以使用的类型?,java,generics,Java,Generics,我想要一个分数类,可以用来封装关于分数的数据和逻辑,但是我想让用户选择他们想要使用的整数大小。不幸的是,没有只覆盖这些类的通用超类:biginger、Long、Integer、Short 我会使用数字,但我不希望允许非整数,如浮点数或小数 我可以这样做吗 import java.math.BigInteger; public class Fraction<T> { private T numerator; private T denominator; F

我想要一个分数类,可以用来封装关于分数的数据和逻辑,但是我想让用户选择他们想要使用的整数大小。不幸的是,没有只覆盖这些类的通用超类:
biginger、Long、Integer、Short

我会使用
数字
,但我不希望允许非整数,如浮点数或小数

我可以这样做吗

import java.math.BigInteger;

public class Fraction<T> {

    private T numerator;
    private T denominator;

    Fraction(T numerator, T denominator) {
        if (!(T == BigInteger.class || T == Long.class || T == Integer.class || T == Short.class)) {
            throw new Exception();
        }
    }

}
import java.math.biginger;
公共类分数{
私人T分子;
私人T分母;
分数(T分子,T分母){
if(!(T==biginger.class | T==Long.class | T==Integer.class | T==Short.class)){
抛出新异常();
}
}
}

我当前遇到的错误是
T无法解析为变量

我要做的是只使用
分数
,但只有私有构造函数和所有返回实例的公共方法特定于这些类型之一。(因此,从理论上讲,您可以引用
分数
,但实际上只能获取引用基于整数类型的
分数
的实例。)

您可以像

if (numerator.doubleValue() / numerator.longValue() != 1)
{

    throw new IllegalArgumentException();
}
以这种方式检查两个传入的数字。
然而,这将允许你通过10.0之类的东西,但是,嗯,没关系

你试过公共课分数吗?话虽如此,您确实应该仔细阅读java泛型。@bradimus-我认为OP的要点是允许使用
分数,这没有多大意义。关于构造函数中的类检查:我当前得到的错误是
t无法解析为变量
——使用
分子.getClass()
而不是
T
。可能应该提到的是,公共方法将是公共静态方法,也称为工厂方法。在意识到我甚至不能将数字与0进行比较后(见鬼,Java???),我想我放弃了这一点。谢谢你的回复,我会给你接受的回复。