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

时间:2016-08-29 15:54:32

标签: java generics

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

我会使用Number,但我不想允许非整数,如浮点数或小数。

我可以这样做吗?

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();
        }
    }

}

我目前得到的错误是T cannot be resolved to a variable

2 个答案:

答案 0 :(得分:7)

我要做的只是拥有Fraction<T extends Number>,但只有私有构造函数,并且返回实例的所有公共方法都特定于其中一种类型。 (所以,理论上,您可以引用Fraction<Float>,但实际上只能获得引用基于整数的类型的Fraction实例。)

答案 1 :(得分:0)

您可以检查构造函数,例如

    .entry-content,
.entry-summary {
    margin-top: 20px;
    max-width:1000px;
    width: 100%;
    float: none; /* i don't know if this affect any thing */
    **float: none!important;** 
    **padding-left:150px !important;**    
               }

通过这种方式检查两个号码。 然而,这将允许你传递类似10.0的东西,但恕我直言,这没关系。