- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我厌倦了以下问题。请帮忙?我有一个下面的界面
/**
* <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/
我的应用程序上有一个登录系统,其中有一组预定义的用户,如下所示: User user = new User("tommy", "tommy", false); User user2 = new Use
我厌倦了以下问题。请帮忙?我有一个下面的界面 /** * Type of Timestamp. For ex: Date, long, Calendar etc * */ public interf
这里没有问题,只需要解释它是如何工作的。 我正在为我的 C# 类(class)做家庭作业,我设法按照教授提供的代码示例自行完成。问题是我不明白它是如何工作的。以下是让我感到困惑的事情: 首先,为什么我
class C1 { void A(); void B(); } void C1::A(){ return B(); } class C2 : public C1 { void
我有一组代码,它模拟了一个基本的图书馆编目系统。有一个名为 items 的基类,其中定义了通用 id、title 和 year 变量以及其他 3 个派生类(DVD、Book 和 CD)。 基础[元素]
似乎无法弄清楚这一点。我一直收到各种错误,所以我只用我从 Jackson 那里收到的当前错误来写这篇文章。 public class ResponseDetail { private Resp
我希望继承一些 D 类遗产并实现接口(interface) A、B 和 C 的所有属性和方法。请帮我举一个 Delphi 中的示例。 我用德尔福 Xe7 一个类如何实现多个接口(interface)?
看看我的问题: 我有一个如下所示的类: var els=[]; var base = function(){ this.config = {} } var X1 = function(){ }
我正在学习如何编写好的 Makefile。我必须编写几个 gcc 编译命令,这些命令会生成使用不同选项编译的不同文件。我读过有关 .SECONDEXPANSION 的内容,但它不太令我满意,因为它看起
我有很多不同的课程。但是,它们都可以保证具有某些方法,例如render()和Activate()。 我的目标是能够将它们全部存储在一个大列表中。目前,我有一个名为Container的大类,并且我做了类
让我们有一个 C++ 对象 A。A 中有两个变量(VAR1 和 VAR2)可供其子对象访问。对象 B 扩展了 A 并有一个私有(private)变量 VAR3,它还可以访问 VAR1 和 VAR2。
例如,我创建了一个鸟类类,我正在尝试创建一个 boolean 变量,它开始时不快乐,当它飞行时变为快乐,当它尝试游泳时又变回不快乐。 这是我的鸟类 public class Bird extends
我也有一个关于如何在两个类之间创建复制构造函数的问题。 > person(const person& a) : name(a.getName()), address(a.getAddress()),
好吧,这个例子对于我试图理解的概念来说非常简单明了。我将向您展示代码: class Base { protected: string name; public: virtual str
首先,我不太确定如何为我的问题命名。 我有一个关于继承的问题。 假设我创建了一个名为 Class_A 的类: class Class_A { public: int a;
我一直在谷歌上搜索和阅读相关内容,但还没有找到答案,也许有人可以帮我解决这个问题。 我希望我的 UserPile 类能够从我的 CardPile 类访问数据成员和类成员函数。我不断收到标题中提到的错误
假设我在一个类中有一些数据结构如下 class DataStructure { DataStructure(); ~DataStructure(); void reset();
我是一名优秀的程序员,十分优秀!