2014-04-04 45 views
0

如何使用Java数字泛型的关系运算符?如何在数字泛型中使用关系运算符?

public class Test<K extends Number>{ 

private K key; 

public boolean f (int i){ 
    return i < key; //ERROR 
} 

public boolean g (K k){ 
    return k < key; //ERROR 
} 
} 

有没有解决方法呢?相比于?

+2

有没有解决办法。如果'key'是我自定义的'Number'子类的一个对象,那么你对'i

+0

@LuiggiMendoza:数字不可比。 –

+0

@BheshGurung哦,你说得对。 Wel,你仍然有'intValue'和类似的方法来检索存储的值并将其用于比较。根据你的需要做你的设计。 –

回答

1

最简单的解决方案将被标记K延长Number和实施Comparable<K>

public class Test<K extends Number & Comparable<K>>{ 

    private K key; 

    public boolean f (int i) { 
     if (!(key instanceof Integer)) { 
      return false; 
     } 
     return new Integer(i).compareTo((Integer)key) < 0; 
    } 

    public boolean g (K k){ 
     return k.compareTo(key) < 0; 
    } 
} 
2

Java Language Specification的状态

必须是一个类型,它是可转换的每一个数值比较操作符的操作数的类型(§5.1.8)到原始数字 类型,或发生编译时错误。

A型被认为是转换为数字类型如果是 数值类型(§4.2),或者它是一个引用类型,其可以被转换 通过拆箱转换为数字类型。

这些reference types are

Boolean从类型为类型boolean

Byte类型键入byte

Short从类型为类型short

Character类型键入char

Integer类型键入int

Long类型键入long

从Float类型为float类型

Double类型键入double

由于K的全部信息是Number的子类,因此不能保证是以上任何一项,所以不能使用K类型的引用作为<运算符的操作数。

您将不得不根据您尝试实现的内容以及如何比较类型来设计接口的策略。