$Modified = $($(ls 'C:\test.txt').LastWriteTime -gt $enddate);
可能不是T
,而是ExtendsBasedEntity
的某些其他子类型,因此编译错误。
“解决”问题的一种方法是使用类型令牌
BaseEntity
假定对您有用。
,
让我们创建两个扩展terraform plan -out=tfplan
terraform show -json tfplan
的类,并分别命名为BasedEntity
和EBE1
。
现在,使用EBE2
作为类型参数创建一个ResourceAssembly
对象。但是,假设在实现EBE1
方法时,您会执行类似toResource
的操作。
因此,return toResource(new EBE2());
的返回类型正在变为toResource()
,但这是错误的,因为根据结构,您应该返回Resource<EBE2>
。这就是为什么编译时错误。并且Java的类型安全性本能开始发挥作用。
如果要为Resource<EBE1>
方法返回泛型,则必须直接传递toResource
对象,或者将其更改为要在其中初始化的具体类型。并且不使用泛型(尽管我不知道为什么有人会使用第二个选项,但这是使其成为“编译”状态的“解决方案”)。
此外,在声明时在外面。您没有为entity
指定类型参数,因此它是一个原始参数。尝试使用类型参数来实现。您还将在那里有红色的波浪线。
这里是一个示例:
ResourceAssembly
如果您无论如何需要使它按您希望的方式工作,则不要返回static class Resource<T> {
}
static class BasedEntity {
}
static class ExtendsBasedEntity1 extends BasedEntity {
}
static class ExtendsBasedEntity2 extends BasedEntity {
}
static public class ResourceAssembler<T extends BasedEntity> {
public Resource<T> toResource(T entity) {
return toResource(new ExtendsBasedEntity1()); //<----compile error
}
}
public static void main(String[] args) {
new ResourceAssembler<ExtendsBasedEntity1>().toResource(new ExtendsBasedEntity1()); // <---- No errors or warnings. This is valid and legal
new ResourceAssembler<ExtendsBasedEntity2>().toResource(new ExtendsBasedEntity1()); // <----- red squiggly lines here
new ResourceAssembler().toResource(new ExtendsBasedEntity2()); // <--compiler warning about raw types but no error
}
,而是返回Resource<T>
,因为您是在通用方法内部递归的,并且看起来您需要一个对象要作为递归调用的参数输入的具体类型。因此这样做很有意义。
否则,请与@Bohemian's approach一起使用,并确保在您使用的类型的类声明中,有一个无参数的构造函数,否则您将拥有Resource<ExtendsBasedEntity>
。
本文链接:https://www.f2er.com/3141063.html