爪哇 - 的compareTo和运营商

如果我有一个类Person实现Comparable (比较personA.heightpersonB.height ,例如),是有可能使用

personA < personB

作为一个替代

personA.compareTo(personB) == -1?

是否有任何问题,在做这个还是我需要超负荷运营商?

--------------解决方案-------------

没有任何操作员在Java中重载。 你可能有C ++背景。

你必须使用compareTo方法。

没有,这是无法使用personA < personB作为替代品。 而且你不能在Java中重载操作符。

另外,我建议你改变

personA.compareTo(personB) == -1

personA.compareTo(personB) < 0

你现在有什么可能适用于您的班级。 然而,在合同compareTo()是它的时候返回一个负值personA小于personB 。 这负值并不一定是-1,如果用一个不同的类中使用你的代码可能会中断。 它也可以打破,如果有人要改变你的类compareTo()方法不同-但仍然兼容-落实。

这是不可能的,没有; 和Java不支持操作符重载(除了内置的过载)。

顺便说一句,而不是写== -1 ,你应该写< 0 compareTo只是需要返回一个负/零/负价值,而不是专门-1/0/1。

Java没有运算符重载[1]所以,是的,有一个问题:这是不可能的。

-

[1]有,当然,建于几个overloadings:在+操作符对整型,浮点类型,以及String秒。 但是你不能定义自己。

不,“<”不会用于物体时编译。 此外,小心你的测试:

personA.compareTo(personB)==-1

API文档仅仅说的compareTo()当对象是小于指定的对象,这不一定是-1返回一个负整数。 使用

personA.compareTo(personB) < 0

代替。

它不是更多钞票,JAVA不给你操作符重载。
但是,一个更加面向对象的方法是增加内部人的方法

public boolean isTallerThan(Person anotherPerson){
return this.compareTo(anotherPerson) > 0;
}

所以不是写作

if(personA.compareTo(personB) > 0){

}

你可以写

if(personA.isTallerThan(personB)){

}

恕我直言,这是更具可读性,因为它隐藏的细节,它是在域的语言,而不是Java的具体表现。

分类:java的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.996 (s). 10 q(s)