[問題] 有關generics泛型的函式參數super用法
小弟最近在學java觀念上遇到了些難題,
想請教各位一個問題:
在泛型函式中為了要使class Write裡的setName(T)可以不為read-only,
class test裡的WriteName函式把它參數形式改為(Write<? super String>),
使得在寫入name時可以編譯通過,
但是我想不懂的是我又加了一行setName(new Object())它就編不過,
我在想我邏輯是不是又亂了,好不容易稍微看懂為啥要用super取代extends了,
沒想到又卡住了...Orz,我是不是觀念認知出了些差錯?
//=========================================
class Write<T> {
private T name;
public Write(T value) {
name = value;
}
public void setName(T a_name) {
name = a_name;
}
public T getName() {
return name;
}
}
public class test {
public static void main(String[] args) {
test t= new test();
t.WriteName(new Write("Ha"));
t.WriteName(new Write(new Object()));
}
public void WriteName(Write<? super String> value) {
//value.setName(new Object()); //compile error
value.setName("Test2");
System.out.println(value.getName());
}
}
//=========================================
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.104.76.226
→
03/03 20:01, , 1F
03/03 20:01, 1F
→
03/03 20:53, , 2F
03/03 20:53, 2F
→
03/03 21:05, , 3F
03/03 21:05, 3F
→
03/03 21:09, , 4F
03/03 21:09, 4F
→
03/03 23:41, , 5F
03/03 23:41, 5F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):