coo*_*ird 10
它似乎打败了泛型的目的,但它在这里:
Stack<Object>s = new Stack<Object>();
s.add("hello");
s.add(1); // int is autoboxed to Integer
Run Code Online (Sandbox Code Playgroud)
问题是当Object从中检索s时Stack,需要花费一些精力来找出每个元素的类型 - 它将需要使用instanceof和类型转换:
while (!s.isEmpty()) {
Object e = s.pop();
if (e instanceof String)
System.out.println("String: " + (String)e);
else if (e instanceof Integer)
System.out.println("Integer: " + (Integer)e);
else
System.out.println("Other type: " + e);
}
Run Code Online (Sandbox Code Playgroud)
现在,在将泛型添加到语言之前的5天,我们有类似于Java之前的脆弱代码的东西.
通常,您需要使用继承来解决此问题.可能使用标记界面:
interface MyMarker
{
}
class Foo implements MyMarker
{
}
class Bar implements MyMarker
{
}
Run Code Online (Sandbox Code Playgroud)
接口在这种情况下是实用的,因为您可以在单个类中实现无限数量的接口,并且您可以在类中的任何位置添加额外的接口.
然后,您可以将Foo和Bar放在同一个堆栈中:
Stack<MyMarker> s = new Stack<MyMarker>();
s.add(new Foo());
s.add(new Bar());
Run Code Online (Sandbox Code Playgroud)
如果可能的话,这是要走的路.否则你将不得不像coobird建议那样做.