gpt4 book ai didi

java - 使用泛型制作交换方法

转载 作者:行者123 更新时间:2023-11-29 03:11:43 25 4
gpt4 key购买 nike

我在理解书中的一个基本概念时遇到了问题。我应该制作一个方法 swap();使用泛型与 first 和 second 交换位置。我相信我的方法是正确的,但是我将配对类中的代码从 T,S 更改为 T,因为我遇到错误并认为这可以解决问题,但事实并非如此。我的问题是我现在在我的演示类中遇到很多编译时错误,而且我找不到解决方案。

public class Pair<T>
{
private T first;
private T second;



public Pair(T firstElement, T secondElement)
{
first = firstElement;
second = secondElement;
}


public T getFirst() { return first; }

public T getSecond() { return second; }

public void swap()
{

T temp = first;
first = second;
second = temp;
}

public String toString() { return "(" + first + ", " + second + ")"; }
}

这是我遇到的编译时错误。

PairDemo.java:23: error: wrong number of type arguments; required 1
public static Pair<String, Integer> firstContaining(
^
PairDemo.java:6: error: wrong number of type arguments; required 1
Pair<String, Integer> result = firstContaining(names, "a");
^
PairDemo.java:11: error: cannot find symbol
swap();
^
symbol: method swap()
location: class PairDemo
PairDemo.java:30: error: wrong number of type arguments; required 1
return new Pair<String, Integer>(strings[i], i);
^
PairDemo.java:33: error: wrong number of type arguments; required 1
return new Pair<String, Integer>(null, -1);

这是我的演示课

public class PairDemo
{
public static void main(String[] args)
{
String[] names = { "Tom", "Diana", "Harry" };
Pair<String, Integer> result = firstContaining(names, "a");
System.out.println(result.getFirst());
System.out.println("Expected: Diana");
System.out.println(result.getSecond());
System.out.println("Expected: 1");
swap();
}


public static Pair<String, Integer> firstContaining(
String[] strings, String sub)
{
for (int i = 0; i < strings.length; i++)
{
if (strings[i].contains(sub))
{
return new Pair<String, Integer>(strings[i], i);
}
}
return new Pair<String, Integer>(null, -1);
}
}

最佳答案

如果您希望您的 Pair 的元素具有不同的类型,您必须使您的 Pair 类具有两个通用参数:Pair 并使第二个为 U 类型的字段。Swap 然后显然返回一个 Pair 并且不能置换 this 引用。

会像

public Pair<U,T> swap() {
return new Pair(second, first);
}

关于java - 使用泛型制作交换方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28991757/

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