gpt4 book ai didi

java - java中泛型对的反向方法

转载 作者:行者123 更新时间:2023-12-01 18:01:58 24 4
gpt4 key购买 nike

public class Main{

public static void main(String[] args) {

final Pair<Integer> p = new DefaultPair<>(3,5);
p.reverse();
final Pair<Integer> q = new DefaultPair<>(5,3);
}

}

public interface Pair<F> {
F first();
F second();
F reverse();
}

public class DefaultPair<F> implements Pair<F> {
private final F first;
private final F second;
private F reverseFirst;
private F reverseSecond;


public DefaultPair(F first, F second){//constructor
this.first = first;
this.second = second;
}

// method that is not working
@Override
public F reverse() {

this.reverseFirst = second;
this.reverseSecond = first;

System.out.println(this);
return (F)this;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((first == null) ? 0 : first.hashCode());
result = prime * result + ((second == null) ? 0 : second.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof DefaultPair))
return false;
DefaultPair<F> other = (DefaultPair) obj;
if (first == null) {
if (other.first != null)
return false;
} else if (!first.equals(other.first))
return false;
if (second == null) {
if (other.second != null)
return false;
} else if (!second.equals(other.second))
return false;
return true;
}

@Override
public F first(){
return first;
}

@Override
public F second(){
return second;
}


@Override
public String toString() {
return "<" + first + ", " + second + ">";
}

}

import static org.junit.Assert.*;

import org.junit.Test;

public class TestDefaultPair {

@Test
public void test() {
final Pair<Integer> p = new DefaultPair<>(3, 5);
final Pair<Integer> q = new DefaultPair<>(5, 3);
assertEquals(3, p.first().intValue());
assertEquals(5, p.second().intValue());
assertEquals("<3, 5>", p.toString());
assertTrue(p.equals(p));
assertFalse(p.equals(q));
assertFalse(q.equals(p));
assertFalse(p.equals(null));
assertTrue(p.equals(q.reverse()));//test that is not passing
}

}

我需要通过所有测试用例。除了最后一个我必须调用反向方法之外,所有这些都通过了。反向方法的接收者不应发生变异。例如,我不应该将 p(3,5) 反转。除了相反的方法之外,其他方法都有效。如果我调用 p.reverse();并打印出p,它按照原来的顺序打印。

最佳答案

DefaultPair 中的 equals() 实现会检查 firstsecond 字段值是否相等。但是您的 reverse() 方法仅更改 reverseFirstreverseSecond 字段的值。

您需要在 equals() 中使用 reverseFirstreverseSecond 或更改 firstreverse() 中的第二个

关于java - java中泛型对的反向方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40278968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com