Deque<String> d = new Deque<String>();
我希望稍后在代码中将其更改为:
d = new Deque<Integer>();
每当我这样做时,我得到:
incompatible types Deque<Integer> cannot be converted to Deque<String>
如何让它发挥作用,以便我可以将d
分配给Deque<Integer>
?
我试图完成以下任务:
Deque<String> d = new Deque<String>();
d.pushLeft("Datastructuren");
d.pushLeft("is");
d.pushRight("heel");
d.pushRight("leuk");
d.pushLeft("of");
d.pushRight("niet?");
d.changeLeft(5, "test");
d.changeRight(3, "een");
d.changeLeft(2, "Dit");
d.changeRight(4, "is");
d.popRight();
d.popLeft();
for (String i : d) {
System.out.print(i + " ");
}
d = new Deque<Integer>();
d.pushLeft(67);
d.pushLeft(1);
d.pushLeft(13);
d.pushRight(18);
d.pushRight(10);
d.pushRight(2);
d.pushLeft(29);
d.pushRight(88);
d.changeLeft(5, 25);
d.changeRight(1, 17);
d.popRight();
d.changeLeft(8, 18);
d.changeRight(5, 19);
d.popLeft();
for (int i : d) {
System.out.print(i + " ");
}
我知道我可以创建一个不同的变量,但我很好奇我是否可以更改当前的d
变量,以便使用Deque<Integer>
。
答案 0 :(得分:0)
唯一可行的方法是,如果您的收藏集的下限为ActiveSheet.Range("B1").Value = DateSerial(Year(ActiveSheet.Range("A1")), 3, 31)
。
Object
优点是您可以在不影响类型安全的情况下做您想做的事情。此缺点是您无法从Deque<? super Object> d = new Deque<>();
以外的d
中提取值。
Object
作为比较,如果我们使用像// Possible
d.pushLeft("Datastructuren");
// Not type safe in the least
String first = d.get(0);
这样的香草集合,我们可以做到这一点:
List
答案 1 :(得分:0)
你不应该试图为一个问题提供一个(无用的)解决方案,要求提供一些编程语言。在这种情况下,答案就是没办法!
真正的问题是:你为什么要这样做?
最后,您还不清楚要对此代码执行什么操作。如果它只是学习Deque
如何工作而不是第二个变量将最好地完成工作。如果没有,重构将是一个想法,也许通用的方法将有助于稍后处理队列。
Deque<?> d = fillWithString();
for (Object i : d) {
System.out.print(i + " ");
}
d = fillWithInt();
for (Object i : d) {
System.out.print(i + " ");
}
private Deque<String> fillWithString() {
Deque<String> d = new Deque<String>();
d.pushLeft("Datastructuren");
d.pushLeft("is");
d.pushRight("heel");
d.pushRight("leuk");
d.pushLeft("of");
d.pushRight("niet?");
d.changeLeft(5, "test");
d.changeRight(3, "een");
d.changeLeft(2, "Dit");
d.changeRight(4, "is");
d.popRight();
d.popLeft();
return d;
}
private Deque<Integer> fillWithInt() {
Deque<Integer> d = new Deque<Integer>();
d.pushLeft(67);
d.pushLeft(1);
d.pushLeft(13);
d.pushRight(18);
d.pushRight(10);
d.pushRight(2);
d.pushLeft(29);
d.pushRight(88);
d.changeLeft(5, 25);
d.changeRight(1, 17);
d.popRight();
d.changeLeft(8, 18);
d.changeRight(5, 19);
d.popLeft();
return d;
}
由于编译器无法再检查类型,因此无法在此重构中的填充方法之外添加或替换d
中的元素。
答案 2 :(得分:-1)
将d声明为Deque<Object>
,以便将其分配给任何实例。您必须为每个实例关注每个实例的de refer类型以及每个实例的特殊用途。
答案 3 :(得分:-3)
不可能。你可以试试这个:
Deque d = new Deque<String>();