gpt4 book ai didi

java - 一般问题。遗产

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

我厌倦了以下问题。请帮忙?我有一个下面的界面

/**
* <T> Type of Timestamp. For ex: Date, long, Calendar etc
*
*/
public interface TimeStamp<T> extends Comparable<TimeStamp<T>>
{

/**
* Returns the timestamp.
* @return
*/
public T getTimeStamp();

}

在我的代码中我有 2 个列表:

    List<FileTimeStamp> f = new ArrayList<FileTimeStamp>();
List<DefaultTimeStamp> t = new ArrayList<DefaultTimeStamp>();

我想创建一个方法,获取上面两个包含时间戳的列表,然后合并它们。例如:

void merge(List<TimeStamp> l1, List<TimeStamp> l2)
{
l1.addAll(l2);
Collections.sort(l1);
}

但是上面会生成编译时警告。

void merge(List l1, List l2)
missing type arguments for generic class TimeStamp
where T is a type-variable: T extends Object declared in interface TimeStamp

我应该如何定义上述方法而不出现任何编译时警告?我的void merge(List<TimeStamp<????>> l1, List<TimeStamp<????>> l2)应该是什么? ????在左边吗?

最佳答案

如果您关心类型安全,则必须具有相同的类型。

您的问题的解决方案是:

public static <T> void  merge(List<T> left, List< ? extends T> right) {
left.addAll(right);
}

这将如何工作:

  List<TimeStamp> timeList = new ArrayList<>();
List<DefaultTimeStamp> defaultTimeList = new ArrayList<>();
List<FileTimeStamp> fileTimeList = new ArrayList<>();

我们能够执行:

 merge(timeList, defaultTimeList);
merge(timeList, fileTimeList);

merge(timeList, timeList);
merge(defaultTimeList, defaultTimeList);
merge(fileTimeList, fileTimeList);

我们将无法:

 merge(fileTimeList, defaultTimeList);

成功的关键是right列表项必须分配给 left 中的项目类型列表。

合并后你想要排序,这是任务的另一部分。要对 List 进行排序,存储在 list 中的类应该实现接口(interface) Comparable

所以我们最终得到这样的结构:

    public interface TimeStamp extends Comparable<TimeStamp> {

}

public interface DefaultTimeStamp extends TimeStamp {

}

public interface FileTimeStamp extends TimeStamp {

}

要合并和排序,我们需要限制 T执行 Comparable<T> 的类型至少在 T

看起来像这样:

public static <T extends Comparable<? super T>> void  mergeAndSort(List<T> left, List< ? extends T> right) {

left.addAll(right);
Collections.sort(left);
}

所以我们可以说你已经得到了你想要的。

<小时/>

但我会分开操作并使用 Iterables.concat(Iterable ...) ,在 Combine multiple Collections into a single logical Collection?描述它是如何工作的;用于合并,之后我会对它进行排序。

关于java - 一般问题。遗产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13268713/

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