【发布时间】:2018-11-27 23:21:50
【问题描述】:
我过去曾多次遇到过这个问题,但还没有真正找到一个好的解决方案/设计。
以下示例代码将从实体(公司或文章)生成 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();
}
}
}
在上述方法中,问题在于将实体转换为具体类型(在代码的后期进行转换可能很危险)。我试图用泛型来做,但后来我收到了警告
对“生成(T)”的未经检查的调用
我可以改进这段代码吗?
【问题讨论】:
-
PDFGenerater<T extends Entity>怎么样? -
您的示例中没有一点通用代码,因此无法通过发布的代码获得该警告。