我有一项任务,我被困住了。赋值是为此方法编写泛型类:
public static void main(String[] args) {
ValueStore<Object> myStore1 = new ValueStore<Object>();
myStore1.set("Test");
myStore1.get();
///
ValueStore<Object> myStore2 = new ValueStore<Object>();
myStore2.set(myStore1);
myStore1 = myStore2.get();
}
我到目前为止。
public class ValueStore<T> {
private T x;
public void set(T x) {
System.out.println(x);
}
public T get () {
return x;
}
}
我可以打印mystore.set“test”,但不能打印myStore2.set。而且我不明白为什么我的老师将参考变量作为参数传递。当我这样做时,我在控制台中获得ValueStore @ 15db9742。或许这就是重点?
有人可以解释为什么它会说myStore2.set(myStore1);
myStore1 = myStore2.get()
,它应该打印什么以及它背后的逻辑?
提前谢谢你。对不起,如果我的文字很乱。第一次来这里。
答案 0 :(得分:2)
我认为目前您只是遗漏了set()
方法中的一行,如
public void set(T x) {
System.out.println(x);
this.x = x;
}
这样你就可以存储对象。
答案 1 :(得分:0)
我已经评论了一些解释。重点是您可以为ValueStore
提供类型(在此示例中为String
)。这使得类型系统意识到当您在get()
上调用valuestore
时,它会获得string
作为回报。这实际上是仿制药的全部要点。如果您只是放object
,只有您知道get方法将返回String
,因此您必须将其强制转换(如第二个示例中所示)。
public static void main(String[] args) {
// Type your store with String, which is what generics is about.
ValueStore<String> myStore1 = new ValueStore<String>();
// Store a string in it.
myStore1.set("Test");
// Get the object, and the typesystem will tell you it's a string so you can print it.
System.out.println(myStore1.get());
///
ValueStore<Object> myStore2 = new ValueStore<Object>();
// Store your store.
myStore2.set(myStore1);
// The type system only knows this will return an Object class, as defined above.
// So you cast it (because you know better).
myStore1 = (ValueStore<String>) myStore2.get();
System.out.println(myStore1.get());
}
public class ValueStore<T> {
private T x;
public void set(T x) {
this.x = x;
}
public T get () {
return x;
}
}
此代码打印以下内容:
test
test