假设你有一个arraylist定义如下:
ArrayList<String> someData = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
稍后在您的代码中,由于泛型,您可以这样说:
String someLine = someData.get(0);
Run Code Online (Sandbox Code Playgroud)
并且编译器完全知道它将获得一个字符串.是的仿制药!但是,这将失败:
String[] arrayOfData = someData.toArray();
Run Code Online (Sandbox Code Playgroud)
toArray()将始终返回一个对象数组,而不是已定义的泛型数组.为什么该get(x)方法知道它返回什么,但toArray()默认为Objects?
我已经创建了几个 PDF 文档。我试图做的是使用 PDFBox。我需要将文本放在这些创建的文档上的多个位置,但我不想修改这些区域内的文本。例如,可能有一个部分如下 -
姓名: ______________________________
我会将文本放入该区域,但我需要下划线保持相同的长度。我相信最好的解决方案是创建一个文本框或类似的区域上方的文本框,以便线条保持相同的长度。
换句话说,我不想编辑内联文本,因此它会保持相同的长度。我没有这方面的代码,因为我只是想了解 pdfbox 包。我一直在网上寻找示例,但其中大多数只是展示了如何创建文档,而不是如何更新以前的文档。我该怎么做呢?
所以我有一个我想要能够分类的课程.为此,我只是让它实现了集合接口,因此可以在Collections类中使用它.
现在我注意到类本身只是一个跳跃,跳过,并且远离ListIterator,并且它也很好地实现了该接口(展望未来).但是有一个问题,那就是Collection接口和ListIterator接口之间存在方法冲突:
// from the Collection interface:
public boolean add(E someElement);
// from the ListIterator interface:
public void add(E someElement);
Run Code Online (Sandbox Code Playgroud)
是否可以让一个类符合这两个接口?如果不是,这是否意味着这两个接口是互斥的?
我有一个 HashMap 定义如下:
private final Map<String, DataTable> reports = new HashMap();
Run Code Online (Sandbox Code Playgroud)
当我将新条目放入此 HashMap 时,它们最终会根据键按字母顺序排列。它为什么要这样做?如何按照将它们添加到 HashMap 的顺序排列它们?
也许我只是不知道在哪里看或不完全理解线程如何工作,但我有两个不同的JFrame(J1,J2).J1是主JFrame,它有一个选择J2的下拉菜单.当这个J2变得可见时,我需要J1等待J2的foobar值变为-1以外的值.我试图用几种不同的方式给这只猫上皮而没有成功.
我现在正在尝试...
// located in J1
J2 otherFrame = new J2();
....
private synchronized void getNum() {
try {
while (otherFrame.returnNum() == -1) wait();
}
catch (Exception e) {}
Long myResult = otherFrame.returnNum();
...
}
// located in J2
public synchronized Long returnNum() {
try {
while (someNum == -1) wait();
}
catch (Exception e) {}
notify();
return someNum;
}
Run Code Online (Sandbox Code Playgroud)
我确信这看起来很愚蠢,但是我需要J1等到J2有一个赋值给someNum的值.用户单击"提交"时将分配该值.它没有做好这项工作.我在这里做错了什么(更重要的是),如果这是一个线程的事情,我的线程概念在哪里失败?
我在这里要做的是创建文本并将其放在空白页面上.然后该页面将被覆盖到另一个文档上,然后将其保存为一个文档.在1.8中,我能够在PDF中创建一个空白的PDPage,根据需要将文本写入其中,然后将该PDF与另一个重叠,然后使用下面的代码保存或查看屏幕 -
overlayDoc = new PDDocument();
page = new PDPage();
overlayDoc.addPage(page);
overlayObj = new Overlay();
font = PDType1Font.COURIER_OBLIQUE;
try {
contentStream = new PDPageContentStream(overlayDoc, page);
contentStream.setFont(font, 10);
}
catch (Exception e){
System.out.println("content stream failed");
}
Run Code Online (Sandbox Code Playgroud)
在我创建了流之后,当我需要向overlay文档的contentStream写一些东西时,我会调用这个方法,给它我的x,y coords并告诉它要写什么文本(再次,这是我的1.8版本):
protected void writeString(int x, int y, String text) {
if (text == null) return;
try {
contentStream.moveTo(x, y);
contentStream.beginText();
contentStream.drawString(text); // deprecated. Use showText(String text)
contentStream.endText();
}
catch (Exception e){
System.out.println(text + " failed. " + e.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
每当我需要添加文本和我需要的任何地方时,我都会调用此方法.在此之后,我将关闭我的内容流,然后将文档合并在一起:
import org.apache.pdfbox.Overlay;
Overlay …Run Code Online (Sandbox Code Playgroud) 我可以用我使用的其他语言来做到这一点.例如,我可以在创建Web应用程序时在PHP中执行此操作,但这是我想要做的并且找不到解决方案:
我想定义一个接口说:
unit myBigUnit;
interface
uses someUnits;
type
TsampleType = class
someVar: Integer;
someOtherVar: Integer;
someObj: TneatObj;
procedure foo;
function bar : String;
procedure foobar(a: boolean);
Run Code Online (Sandbox Code Playgroud)
所有这些都在一个文件中.现在我想要两个实现此接口的文件或者至少知道它.在PHP我可以说
class blah implements thisInterface
Run Code Online (Sandbox Code Playgroud)
但我在Delphi中找不到相同的东西.我想要做的是在一个单元中实现它,而在另一个单元中我只是想让它知道这些函数/过程/等等,所以我可以从那里调用它们.我不在乎它是如何实现的.我认为这是接口并将它们与实现者分开的重点?
我如何在Delphi中执行此操作?