检查方法是否被Java覆盖

时间:2016-03-05 16:42:45

标签: java override partial-ordering

我想实现一个比较我的界面Task的两个对象的方法。由于Task上只有严格的部分排序partialCompareTo当{且仅当两个对象无法比较null >

如果您对严格的部分排序的概念感到困惑,请查看以下内容: https://en.wikipedia.org/wiki/Partially_ordered_set

动机:某些任务将具有必须在另一个任务之前或之后完成的约束。然后将其用于topological sort任务,即以满足所有约束的方式排列它们。

对于Task ab的任何实例,它应具有以下属性:

  • 如果a.partialCompareTo(b) != nullsgn(a.partialCompareTo(b)) = -sgn(b.partialCompareTo(a))
  • 如果a.partialCompareTo(b) = nullb.partialCompareTo(a) = null

注意:我无法使用标准库的Comparable接口,因为任务上没有总排序:{{1 } compareTo中的{}返回Comparable,因此如果两个对象无法比较,则无法获得足够的结果。特别是将会有Task的实现,其中实现的实例从不可比较彼此(但可能与其他实例相当任务的子类,覆盖 int)。

如果它覆盖了类partialCompareTo中指定的方法,则使用参数的partialCompareTo方法。

以下方法实际上更多的是一个笑话而不是实际尝试,因为每次比较两个不可比较的对象时,我们得到一个StackOverflowError(被捕获,但无论如何这是不可行的):

Task

以下实现显然更好,但它有缺点,总是必须覆盖辅助方法public class Task implements TopologicalComparable<Task> { /* * other code */ @Override public Integer partialCompareTo(Task other) { Integer result; try { result = - other.partialCompareTo(this); } catch (StackOverflowError | NullPointerException e) { return null; } return null; } }

overridesDefaultPartialCompareTo

有没有办法在代码中询问方法是否被覆盖

或者是否有其他方法可以解决我的问题?

2 个答案:

答案 0 :(得分:0)

当你比较的东西时,你应该使用duffymo推荐的具有类似界面的东西。要详细说明,您应该将项目保留在ArrayList中,然后覆盖compare方法。我不确定为什么你有pCompare,但我会假设你不了解继承和多态。您应该使用扩展,而不是更改比较的名称,这里有关于继承的documents,请阅读它们。看起来你的语法很好,但你对Java代码编写的理解并不好。那你该怎么做?

让我们从我认为错误的第一件事开始(如果这不正确,请随时纠正我们)你没有正确使用界面。接口适用于声明全局变量,帮助您实现设计模式等。大多数人都说这是一种行为契约。简单的英语使用界面来帮助您通过Multiple Inheritance。我不知道你为什么要使用它以及你打算用它做什么,但我从来没有在实现的接口上添加方法。

接下来的事情是你重命名你的pCompareTo 我从来没有这样做过,我帮助制作了一些非常大的程序。我真的不认为这是一个很好的编程。它应该在课堂上。使用它的课程虽然并不总是很好,但我很难想到如何解释它,所以你可能需要做一些研究。

当您摆脱界面时,将compareTo()放在正确的位置(不要将其更改为编程错误的pCompareTo()),就像您一样覆盖它,并指定进入它的内容。 注意这很重要通常当你覆盖比较时你有compareTo方法,如果进入的对象小于它的比较,则返回-1,如果它更大则返回1如果大小相同,则为0。如果您只想检查它是否相等,那么您可以简单地检查它们是否与您所做的字符串相同

string1.equals(string2)

如果为真则返回1,如果为假则返回0。

 @Override
public default Integer pCompareTo(Task other) {
    Integer result;
    try {
        result = - other.pCompareTo(this);
    } catch (StackOverflowError | NullPointerException e) {
        return null;
    }
    return null;
}

好吧,这是一个可怕的错误的人,只是可怕的错误。你的方法是 pCompareTo()对吗?你在里面调用它(这叫做递归,我不建议你现在使用它)。我不知道你在比较什么(也是你不需要尝试捕获,但是如果你想,可以尝试捕获就像你在代码中设置的陷阱,如果特定区域没有工作正常),但如果他们是整数你会做类似的事情

@Override
public int compareTo(Integer other){
 if (this < other) {
  return 1;
 }
 if (this > other) {
  return -1;
 }
 return 0;

请参阅override说明。对于我来说,在这个已经很长的帖子中解释它是如何工作的。祝你好运,我在编程中的建议语法并不是很重要。知道如何正确编程更为重要。

答案 1 :(得分:0)

修订版略胜一筹,更有意义。谢谢你。现在开始,您需要了解您正在比较对象。如果您想编写compareTo()方法,您需要考虑“我在比较什么”。为了编写您的方法,您需要向我们解释您要比较的内容,在您的脑海中,您可能会比较一组中的元素。但是在编程世界中,你正在比较整数,字符串或w / e。所以我问你,你在比较什么?你应该做一个与你比较的w / e,比如说

class POsetElement{...
//make some sort of set element object
}

在本课程中,您希望implement comparable喜欢这样,

class POsetElement implements comparable{...
//make some sort of set element object...

//then make w/e other methods you need...

//now use compareTo() override
@override
compareTo(){
//make your custom method
}
}

注意我如何将compareTo()方法 INSIDE 放在POsetElement类中。 Java是OOP。这意味着面向对象的编程。您需要自定义构建对象。你需要创建自己的世界,创建自己的对象。我无法向你解释所有这些。请付出一些努力,学习更多java编程。另外你需要理解我会说这些是一些非常基本的东西,我将再次重申你需要阅读一些关于java基础知识的内容。祝你好运。