? 超字符串下界Java
我正在读作者珍妮·博亚尔斯基和斯科特·塞利科夫为OCP写的书,书上写着:第122页? 超字符串下界Java,java,generics,bounded-wildcard,lower-bound,Java,Generics,Bounded Wildcard,Lower Bound,我正在读作者珍妮·博亚尔斯基和斯科特·塞利科夫为OCP写的书,书上写着:第122页 ? super String 对于下限,我们告诉Java,该列表将是字符串对象的列表或 作为字符串超类的某些对象的列表 List<? super String> superString = new ArrayList<>(); superString.add(new String());// Valid superString.add(new Object())
? super String
对于下限,我们告诉Java,该列表将是字符串对象的列表或
作为字符串超类的某些对象的列表
List<? super String> superString = new ArrayList<>();
superString.add(new String());// Valid
superString.add(new Object()); // Not Valid ? Why?. Object is a super class of String
List<? super IOException> exceptions = new ArrayList<IOException>();
List您需要了解,这些边界(上下限)用于限制/指定变量的类型,而不是用于限制/指定此类集合中元素的类型
例如:
List<? super String> variable = new ArrayList<CharSequence>();
List这里有一个链接,指向一个好的解释
这本书是正确的?“超级字符串”意味着列表可能包含字符串或字符串的超类型(例如Object、CharSequence)
在你的例子中:
List<? super String> superString = new ArrayList<>();
superString.add(new String());// 1
superString.add(new Object()); // 2
您可能有以下情况:
List<? super MyInterfaceImpl> myList = new ArrayList<MyInterfaceImpl>();
例如,您可以获得一个值列表。元素类型是Object,不能保证更具体的类型。例如,这里您需要字符串,但得到一个列表换句话说:可以给变量分配一个超类型(String、CharSequence、Object)的列表,编译器只能知道字符串可以安全地放在列表中。List@ShahidGhafoor无效,,因为您可以像这样初始化变量:ListRelated:?“超级字符串”表示列表可能包含字符串或字符串的超类型(如Object、CharSequence)
请给出中的完整示例?超级字符串
同时包含字符串和超类型对象。bcz答案对我来说仍然不清楚..谢谢
List<? super String> superString = new ArrayList<>();
superString.add(new String());// 1
superString.add(new Object()); // 2
List<? super String> list = new ArrayList<Object>();
list.add("String");
List<? super String> list = new ArrayList<String>();
list.add(new Object());
interface MyInterface {
}
class MyInterfaceImpl implements MyInterface {
}
class MyInterfaceImplExtra extends MyInterfaceImpl {
}
List<? super MyInterfaceImpl> myList = new ArrayList<MyInterfaceImpl>();
myList.add(new MyInterface(){}); // - compile error "not applicable for the arguments"
myList.add(new MyInterfaceImpl()); // - works fine
myList.add(new MyInterfaceImplExtra()); // - works fine
List<String> result = (List<String>) getList();
System.out.println(result.get(0));
public static List<? super String> getList(){
List<Object> list = new ArrayList<Object>();
list.add(new Object());
return list;
}
Stream<T> filter(Predicate<? super T> predicate);
List<Person> list = new ArrayList<Person>() {{
add(new Person("John"));
add(new Person("Max"));
add(new Person("Megan"));
}};
list.stream().filter((Employee e) -> e.getId().startsWith("1")); // compile error