在我的Spring Boot应用程序中,我尝试实现模板方法,在我的具体类中,我尝试使用泛型,如下所示:
模板界面:不确定我是否需要使用它?
public interface PDFGenerator {
String createHtml(UUID uuid);
}
模板抽象类:
public abstract class AbstractPDFGenerator<T> implements PDFGenerator {
@Override
public String createHtml(UUID uuid) {
T dto = getDTO(uuid);
Context context = new Context();
context.setVariable(getName(), dto.getName());
// ...
}
protected abstract String getName();
// code omitted
}
混凝土等级:
@Service
@RequiredArgsConstructor
public class BrandPDFGenerator extends AbstractPDFGenerator<BrandDTO> {
private static final String NAME = "brandName";
private final BrandService brandService;
@Override
protected String getName() {
return NAME;
}
@Override
protected BrandDTO getDTO(UUID uuid) {
return brandService.findByUuid(uuid);
}
// ...
}
@Service
@RequiredArgsConstructor
public class ProductPDFGenerator extends AbstractPDFGenerator<ProductDTO> {
private static final String NAME = "productName";
private final ProductService productService;
@Override
protected String getName() {
return NAME;
}
@Override
protected ProductDTO getDTO(UUID uuid) {
return productService.findByUuid(uuid);
}
// ...
}
我在dto中得到“无法解析‘T’中的方法‘getName’”。getName()行输入AbstractPDFGenerator。
我的问题是:
1.为了解决这个问题,我想从继承BrandDTO
和ProductDTO
的基类扩展T。但是,我不想从基类继承它们,因为它们没有使用类似的目的。那么,我如何解决这个问题(“无法解决'T'中的方法'getName'”)?
2.我需要使用PDFGenerator
接口吗?或者我应该删除它?
使用接口,而不是抽象类。
public interface HasName {
String getName();
}
然后让BrandDTO
和ProductDTO
实现它,并引入T
的绑定-仅HasName
的实现。
public abstract class AbstractPDFGenerator<T extends HasName> implements PDFGenerator
我试图在Scala中返回抽象泛型类的子类,但它无法编译。我得到A类型的表达式不符合预期的B类型。这是我使用的代码: 创建()的签名应该是什么? 谢谢
假设您有以下抽象java类: 以及以下子类层次结构: 假设您需要在超类上的给定点使用泛型类型,例如,为了在构造函数上使用gson库将请求json反序列化到特定的请求对象,如下所示: 您需要变量“typeOfI”中的泛型I类型 是否有一个全局解决方案,允许获得由尊重以下约束的具体子类指定的泛型类型? 该类型是在运行时获取的,与子类的层次结构无关(这个问题的示例可能更复杂) 开发人员只需要定义泛型来扩
我有一个子类,它声明了我的抽象超类中的所有方法,但它仍然给我一个错误,说明我的类不是抽象的。我不知道为什么会抛出这个错误。 我得到的具体错误是 PhoneBookEntry.java: 1:错误:PhoneBookEntry不是抽象的,并且不会覆盖可比中的抽象方法compareTo(Object) 我的问题代码: 还有我的子类:
我查过了,发现最接近的是这个,除了我没有任何向前的声明。我在基类中只有一个纯虚函数,我在子类中实现它,如下所示: 命令H 命令cpp 数字H 数字cpp 发生文件错误: 一个dd.cpp 添加H
我无法编译一个需要从抽象类超类型重写方法的方法,该类超类型使用泛型作为其中一个参数。编译器抱怨扩展类的setRef()方法没有重写超类型中的方法。 父摘要类: 参考是: 而Interf是: 扩展子类(setRef()不编译): 我也尝试过使用通配符,但收到了相同的错误。使用通配符时,抽象类“setRef()是: 扩展类setRef()是: 甚至: 我能让它编译的唯一方法是,如果扩展类“setRef
它是关于java中具有两种泛型类型(一种用于返回类型,另一种用于形式参数)的泛型方法以及如何实现它。我想我在图片中缺少一些东西来让它工作。 事情是这样的... 这是工作 : 这不起作用: java编译器告诉我: 好吧,就是这样。提前感谢大家!希望它能在未来帮助别人! P、 D:这不是枚举类型的问题。它发生在类和层次结构之间。所以别怪Enum了,我试过了,但没用。 对于泛型参数 我们可以做一个一般规