在Java中,不可能直接创建泛型类型的数组:
Test<String>[] t1 = new Test<String>[10]; // Compile-time error
Run Code Online (Sandbox Code Playgroud)
但是,我们可以使用原始类型执行此操作:
Test<String>[] t2 = new Test[10]; // Compile warning "unchecked"
Run Code Online (Sandbox Code Playgroud)
在Java 8中,也可以使用构造函数引用:
interface ArrayCreator<T> {
T create(int n);
}
ArrayCreator<Test<String>[]> ac = Test[]::new; // No warning
Test<String>[] t3 = ac.create(10);
Run Code Online (Sandbox Code Playgroud)
为什么编译器在最后一种情况下不显示警告?它仍然使用原始类型来创建数组,对吗?
我正在使用jfreesane和Apache PDFBox编写一个简单的扫描应用程序.
这是扫描码:
InetAddress address = InetAddress.getByName("192.168.0.17");
SaneSession session = SaneSession.withRemoteSane(address);
List<SaneDevice> devices = session.listDevices();
SaneDevice device = devices.get(0);
device.open();
device.getOption("resolution").setIntegerValue(300);
BufferedImage bimg = device.acquireImage();
File file = new File("test_scan.png");
ImageIO.write(bimg, "png", file);
device.close();
Run Code Online (Sandbox Code Playgroud)
并制作PDF:
PDDocument document = new PDDocument();
float width = bimg.getWidth();
float height = bimg.getHeight();
PDPage page = new PDPage(new PDRectangle(width, height));
document.addPage(page);
PDImageXObject pdimg = LosslessFactory.createFromImage(document, bimg);
PDPageContentStream stream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true);
stream.drawImage(pdimg, 0, 0);
stream.close();
document.save(filename);
document.close();
Run Code Online (Sandbox Code Playgroud)
这是结果: …
我已经设置了Nexus代理中央Maven存储库并添加了一个镜像settings.xml:
<mirror>
<id>nexus</id>
<mirrorOf>central</mirrorOf>
<url>http://my-host:8081/nexus/content/repositories/central/</url>
</mirror>
Run Code Online (Sandbox Code Playgroud)
它工作正常,但如果我尝试添加其他存储库,pom.xml如下所示:
<repository>
<id>jboss</id>
<url>http://repository.jboss.org/nexus/content/repositories/releases/</url>
</repository>
Run Code Online (Sandbox Code Playgroud)
Maven的只是没有看到这些仓库,直到我删除<mirror>的setting.xml.我还尝试将其他存储库镜像到Nexus,没有运气:Maven仍然只使用中央存储库.
我究竟做错了什么?
尝试执行以下查询时,我不断收到"无效查询"异常:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskQuota WHERE QuotaVolume.DeviceID = 'C:'");
ManagementObjectCollection quotaCollection = searcher.Get();
Run Code Online (Sandbox Code Playgroud)
但是这可行:"SELECT*FROM Win32_DiskQuota".
根据MSDN:
对于WHERE子句中类描述符的大多数用法,WMI将查询标记为无效并返回错误.但是,对WMI中的object类型的属性使用点(.)运算符.例如,如果Prop是MyClass的有效属性并且类型为object,则以下查询有效:
SELECT*FROM MyClass WHERE Prop.embedprop = 5
这是否意味着只有在Prop宣布为OBJECT时才有效?
以下是异常详细信息:
System.Management.ManagementException was unhandled
HResult=-2146233087
Message=Invalid query
Source=System.Management
StackTrace:
? System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
? System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
? UserQuota.Program.getQuota() ? c:\users\administrator\documents\visual studio 2015\Projects\UserQuota\UserQuota\Program.cs:?????? 40
? UserQuota.Program.Main(String[] args) ? c:\users\administrator\documents\visual studio 2015\Projects\UserQuota\UserQuota\Program.cs:?????? 33
? System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
? System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
? Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
? System.Threading.ThreadHelper.ThreadStart_Context(Object state)
? System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object …Run Code Online (Sandbox Code Playgroud) 例如,我有Service实体:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "service")
public List<ServiceStatus> getServiceStatuses() {
return serviceStatuses;
}
Run Code Online (Sandbox Code Playgroud)
和ServiceStatus实体:
@ManyToOne
@JoinColumn(name = "service", nullable = false)
public Service getService() {
return service;
}
@Column(name = "date", nullable = false)
@Temporal(TemporalType.DATE)
public Date getDate() {
return date;
}
Run Code Online (Sandbox Code Playgroud)
现在我需要查询所有Service对象,以便每个ServiceStatus对象只有那些ServiceStatus.date介于date1和之间的对象date2.也就是说,如果有10个ServiceStatus对象具有正确的日期,则serviceStatuses列表将只有那10个对象而已.可能吗?
提前致谢.
假设我有一个使用 ltree 存储的树:
id | path | sort
------------------------------
0 |0 |1
1 |0.1 |2
2 |0.1.2 |3
3 |0.1.3 |1
4 |0.1.4 |2
5 |0.5 |3
6 |0.6 |1
Run Code Online (Sandbox Code Playgroud)
我想选择节点,以便:
像这样:
id | path | sort
------------------------------
0 |0 |1
6 |0.6 |1
1 |0.1 |2
3 |0.1.3 |1
4 |0.1.4 |2
2 |0.1.2 |3
5 |0.5 |3
Run Code Online (Sandbox Code Playgroud)
第一个要求是可能的ORDER BY path,但我不知道如何实现第二个要求,这甚至可能吗?