考虑以下几类:
class A{ }
class B extends A{ }
正如我们所知,这可以很好地编译:
List<? extends A> xx = new ArrayList<B>();
List<? extends List<? extends A>> xy = new ArrayList<List<? extends A>>();
但这会导致编译时错误。
List<? extends A> yx = new ArrayList<? extends A>();
List<? ex
我偶然发现了这样的代码:
public class RestfulAdage extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(Adages.class);
return set;
}
}
我不明白Class<?>是什么意思。
我知道你会如何编写一个包含(E item)方法,通过检查其中的每一项,如果你发现其中一个元素等于item,就返回true。
但是,在使用c时,如何处理集合的通配符类型呢?例如,你是不是应该说:
for (Object item: c) {
您如何引用它是一个?类型。
编译器不喜欢:
for (? item: c)
或
for (<?> item: c)
我学习注释,在其中一个学习任务中,我必须将一些带有@Cache注释的缓存实现注入到注释为@InjectCache的字段中。
我编写了这段代码,但在表达式cannot resolve symbol name()上得到了cache.getAnnotation(Cache.class).name()错误,但是field.getAnnotation(InjectCache.class).name()前面的几个字符串没有错误的解析。
@Cache和@InjectCache都有参数name(),它们的区别只是一个@TARGET注释。
package annotations;
import ann
我正在尝试创建一种服务定位器类,其中有一个
Map<Integer, ? extends ISomething>
但我以后不能
myMap.put(0x00, new SomethingImplementor())
当我得到一个Error:(18, 33) java: incompatible types: org.sample.SomethingImplementor cannot be converted to capture#1 of ? extends ISomething
我的班级结构如下:
public interface ISomething {
public
可以指定未知的泛型类型是自引用的吗?
失败的尝试:
import java.util.*;
class Generics {
public enum A { A1, A2 }
public enum B { B1, B2 }
public static List<? extends Enum<?>> listFactory(String[] args) {
if (args.length == 0) {
return new ArrayList<A>(Arrays.asList(A.A1, A.A2));
我目前有三个类,并试图实现通用访问者模式,将其放入我们所有项目共享的库中:
public interface Visitable<ReturnType> {
public ReturnType accept(Visitor<?, ?> v);
}
public interface Visitor<SomeVisitable extends Visitable<?>, ReturnType> {
public ReturnType visit(SomeVisitable v);
}
public class BaseOb
我遇到了这个问题:
我们得到了一个地图界面:
interface MyMap<K,V>{
public void put (K key, V value);
public V get (K key);
public boolean containsKey (K key);
}
我们想要实现一个方法addToMyMap,它的签名是(我们需要填充缺失的部分(点):
void addToMyMap(MYMap<....> m, List<....> keys, .... newValue)
该方法将扫描键列表,对于每个键,如果它不存在于映射中,它将以n
让我们使用通配符来研究一些一般的实例化情况:
1
这段代码
List<?> list = new ArrayList<?>();
生成以下错误:
required: class or interface without bounds
found: ?
2
但这是
List<?> list = new ArrayList< Set<?> >();
编译成功。
3.
这是:
List<Set<?>> list = new ArrayList< Set<?> >();
编译也是成功的。
在我的上一篇中(谢谢你给我的回复),我学会了List<Object>和List<?>之间的区别。
然而,我仍然看不到通配符的用处。
我有两个ArrayList:
ArrayList<Integer> li = new ArrayList<Integer>(Arrays.asList(1,2,3));
ArrayList<String> ls = new ArrayList<String>(Arrays.asList("one","two","three"));
现在,看看下面
我试图在java中对两个RDDs进行分组,其中一个RDD v2的类型如下:JavaPairRDD<Key, ? extends Value> (实际上是用? extends定义的,因为它是一个函数参数)。
然后当我把它们组合在一起时,就像:
void f(JavaPairRDD<Key, ? extends Value> v2){
TYPE v = v1. cogroup(v2);
// ERROR. I cannot get the correct type for this cogroup function
}
编译器会抱怨,因为当我试图从这个cog
背景:这个问题出现在中(确切地说,是答案的第一个修订版)。这个问题中提供的代码被减少到最低限度来解释这个问题。
假设我们有以下代码:
public class Sample<T extends Sample<T>> {
public static Sample<? extends Sample<?>> get() {
return new Sample<>();
}
public static void main(String... args) {
Sample<? e
我有两个部分的问题
“如果指定通配符时没有上限,那么只能在通配符类型的值上调用对象的方法”。
我不知道这可能意味着什么。这是什么意思?
外卡类型(无界和有界)的限制是什么?例如,如果我有对MyClass<?>或MyClass<? extends SomeOtherClass>的引用,那么不允许通过该引用调用哪些方法。我不明白允许或不允许做什么,这可能就是为什么我不理解书中的引语。
我有一个第二部分的例子:
class SomeOtherClass
{
[...]
}
class MyClass<T>
{
[...]
}
class Test
{