gpt4 book ai didi

Java 如何避免类型转换

转载 作者:行者123 更新时间:2023-11-30 05:53:47 24 4
gpt4 key购买 nike

我过去曾多次遇到这个问题,但还没有真正找到一个好的解决方案/设计。

下面的示例代码将从实体(公司或文章)生成 PDF 文档

public class Entity
{
int id;
}

public class Company extends Entity
{
private String HQ;
}

public class Article extends Entity
{
private String title;
}

public interface EntityPDFGenerator
{
void generate(Entity entity);
}

public class ArticlePDFGenerator implements EntityPDFGenerator
{
public void generate(Entity entity)
{
Article article = (Article) entity;
// create Article related PDF from entity
}
}

public class CompanyPDFGenerator implements EntityPDFGenerator
{
public void generate(Entity entity)
{
Company company = (Company) entity;
// create Company related PDF
}
}

主类:

public class PDFGenerator
{
public void generate(Entity entity)
{
EntityPDFGenerator pdfGenerator = getConcretePDFGenerator(entity);
pdfGenerator.generate(entity);

}

// lets make the factory task simple for now
EntityPDFGenerator getConcretePDFGenerator(Entity entity)
{
if(entity instanceof Article){
return new ArticlePDFGenerator();
}else{
return new CompanyPDFGenerator();
}
}
}

在上述方法中,问题在于将实体转换为具体类型(在代码的后期阶段转换可能很危险)。我尝试用泛型来实现它,但后来我收到警告

Unchecked call to 'generate(T)'

我可以改进这段代码吗?

最佳答案

在这里,您可以接受建议的更改:

public interface EntityPDFGenerator<T extends Entity> {
void generate(T entity);
}


public class ArticlePDFGenerator implements EntityPDFGenerator<Article> {

public void generate(Article entity)
{
// create Article related PDF from entity
}
}


public class CompanyPDFGenerator implements EntityPDFGenerator<Company> {

public void generate(Company entity)
{
// create Company related PDF
}
}

关于Java 如何避免类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53500573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com