我因为缺乏对仿制药的了解而道歉...我试图理解仿制药是如何工作的,我不确定它是什么但是我错过了一个关键部分,这是我想要的,所以希望有人可以澄清一个更多,让我超过这个驼峰。
BaseDtoUtil.mapToDto(map, OcrImageDocDto.class); //OcrImageDocDto extends DtoUtils
//This method is in class BaseDtoUtil
public static <T> List<T> mapToDto(Map<String, Object> map, Class<? extends DtoUtils> klass) throws SparkSQLException{
T obj = (T)klass.newInstance();
//return a list of these
}
所以我想我有两个问题:
OcrImageDocDto.class
时,为什么会抱怨? (我原来把它当作(Class<?>
)这不是指任何阶级价值吗?显然我错了,但不确定那意味着什么。<T> List<T>
?如果我没有弄错,我相信通用变量<T> List<T>
用于对象的实例化。但如果它是一种静态方法,他们会怎么做?我有点迷失,也许我理解泛型是错误的......所以如果有人能清除这两个,我觉得它会有很大的帮助!
答案 0 :(得分:2)
问题1:
distinct_persons = set()
def get_distinct_persons(population):
for person in population.persons:
distinct_persons.add(person.person_id)
if __name__ == '__main__':
population = Population()
person1 = Person(1)
population.persons.append(person1)
person2 = Person(2)
population.persons.append(person2)
get_distinct_persons(population)
您不知道可以将public static <T> List<T> mapToDto(
Map<String, Object> map,
Class<? extends DtoUtils> klass) throws SparkSQLException{
T obj = (T)klass.newInstance();
...
强制转换为klass.newInstance()
- 您只知道它是T
(或子类)的实例。
因此,您可以更改为使用:
DtoUtils
或约束DtoUtils obj = klass.newInstance();
以扩展T
:
DtoUtils
问题2:
是的,因为你有一个实际的类实例。由于类型擦除,您将无法创建没有该实例的实例(或可以提供public static <T extends DtoUtils> List<T> mapToDto(
Map<String, Object> map,
Class<? extends T> klass) throws SparkSQLException{
T obj = klass.newInstance();
...
实例的其他对象)。
这不起作用:
T
以下内容的工作正常:
public static <T extends DtoUtils> List<T> mapToDto(
Map<String, Object> map) throws SparkSQLException{
T obj = new T(); // Compiler error.