Generics 无法直接实例化Java 8通配符类型

Generics 无法直接实例化Java 8通配符类型,generics,java-8,compiler-errors,Generics,Java 8,Compiler Errors,这里是Java8。我有以下通用类: public class Memory<T> { private String moniker; private Date timestamp; private T data; // constructors, getters & setters, etc. } 但是,对于该用法,我在返回语句中得到一个编译器错误: 不能直接实例化通配符类型“?” 同样,我希望MemoryFactory是非泛型的,并允许我

这里是Java8。我有以下通用类:

public class Memory<T> {
    private String moniker;
    private Date timestamp;
    private T data;

    // constructors, getters & setters, etc.
}
但是,对于该
用法,我在返回语句中得到一个编译器错误:

不能直接实例化通配符类型“?”

同样,我希望
MemoryFactory
是非泛型的,并允许我进行以下调用:

Memory<Fizz> fizzMemory = memoryFactory.createMemory(new Fizz(), "fizz1");
Memory<String> strMemory = memoryFactory.createMemory("SOMETHING", "str1");
Memory<Buzz> buzzMemory = memoryFactory.createMemory(new Buzz(11, true), "buzz1");
Memory fizzMemory=memoryFactory.createMemory(新Fizz(),“fizz1”);
Memory stremory=memoryFactory.createMemory(“某物”、“str1”);
Memory buzzMemory=memoryFactory.createMemory(新Buzz(11,true),“buzz1”);

我需要做什么才能完成此操作并修复编译器错误?

不管您在实现中做什么,此签名都不允许您进行这些调用,因为
内存
内存的超类型。如果您有
公共对象createMemory(…)
,您不会期望将其结果分配给
内存
,是吗?这也不例外

要允许这些调用,必须将
createMemory
(而不是
MemoryFactory
)设置为通用:

公共内存createMemory(T数据,字符串名字对象){
现在日期=新日期();
返回新内存(名字对象、现在、数据);//或新内存
}
Memory<Fizz> fizzMemory = memoryFactory.createMemory(new Fizz(), "fizz1");
Memory<String> strMemory = memoryFactory.createMemory("SOMETHING", "str1");
Memory<Buzz> buzzMemory = memoryFactory.createMemory(new Buzz(11, true), "buzz1");
public <T> Memory<T> createMemory(T data, String moniker) {
    Date now = new Date();

    return new Memory<>(moniker, now, data); // or new Memory<T>
}