【问题标题】:How to declare array of parameterized object in Java?如何在 Java 中声明参数化对象的数组?
【发布时间】:2020-09-12 20:20:29
【问题描述】:

我已经用PDRectangle 参数声明PDPage

Float width = 8.5f;
Float height = 5f;
Float dpi = 72f;
PDRectangle size = new PDRectangle(width*dpi, height*dpi);
PDPage page = new PDPage(size);

但我想在一个数组中声明多个具有自定义PDRectangle 大小的PDPage

有些不完全一样:

ArrayList<PDPage> page = new ArrayList<PDPage(size)>();

【问题讨论】:

  • 所有PDPage 对象的大小是否相同?
  • 在 Java 中,我们只能在类型上使用泛型,而不是值。因此,我们会写.. = new ArrayList&lt;PDPage&gt;();。如果我们需要PDPages 中的List 和固定的size,我们需要从PDPage 子类化并在子类中固定size。 --- 为什么List&lt;PDPage&gt; 不够用?

标签: java generics arraylist


【解决方案1】:

创建一个列表和初始化它的元素是有区别的。列表的初始化只关心泛型类规范:

List<PDPage> page = new ArrayList<>();

然后,您可以使用自定义 size 向其中添加多个 PDPage 实例:

page.add(new PDPAge(size)); // This can be done multiple times, e.g. in a loop

【讨论】:

    【解决方案2】:

    正如 Mureinik 在他的回答中所说,您首先必须实例化列表,

    ArrayList<PDPage> pages = new ArrayList<>();
    

    在向其添加实例之前(例如十次):

    for(int i = 0; i < 10; i++) {
        pages.add(new PDPage(size))
    }
    

    如果列表中的所有对象都必须具有相同的尺寸,理论上您可以创建一个子类:

    public class SpecialPDPage {
        private static final Float width = 8.5f;
        private static final Float height = 5f;
        private static final Float dpi = 72f;
        private static final PDRectangle size = new PDRectangle(width*dpi, height*dpi);
    
        public SpecialPDPage() {
            super(size);
        }
    }
    

    然后初始化列表并添加对象如下:

    ArrayList<SpecialPDPage> pages = new ArrayList<>();
    for(int i = 0; i < 10; i++) {
        pages.add(new SpecialPDPage())
    }
    
    

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多