有没有办法在运行时从这个类的代码确定已执行类的当前文件系统位置,因为它是使用java命令执行的?
例如,对于以下类:
public class MyClass{
public static void main(String[] args){\
new MyClass().doStuff();
}
private void doStufF(){
String path = ... // what to do here?!
System.out.println("Path of class being invoked: " + path);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在调用MyClass.class文件的文件系统中获取和打印正确的路径?
同样,如果我从java -jar命令调用jar文件,有没有办法从该jar内的类中获取jar文件的路径?
PS:请不要做任何假设有关工作目录从java被调用的命令!
在我们的应用程序中,我们需要实现以下场景
我们的应用程序是基于ajax的应用程序,因此我们发送ajax请求(如使用jquery.ajax()函数)非常简单方便.
但是在googilng之后,事实证明只有在使用非ajax POST请求时才能进行文件下载(就像在这个流行的SO线程中所描述的那样).因此,我们需要实现更加丑陋且更复杂的解决方案,这需要form使用嵌套的隐藏字段构建HTML结构.
有人可以用简单的话来解释为什么ajax请求不能用于下载文件?这背后的机制是什么?
是否可以编写如下的JPQL查询:
select count(*) > 0 from Scenario scen where scen.name = :name
这将返回true/false布尔值,具体取决于是否存在实体填充标准?
我想以这种方式使用查询:
boolean exists = entityManager.createQuery(query,Boolean.class).setParameter("name",name).getSingleResult();
Run Code Online (Sandbox Code Playgroud)
我的例子中的查询在语法上是不正确的(解析错误),但有没有正确的方法在JPQL中进行检查,这会返回布尔值,还是只能在Java代码中进行?
有几次我看到像这样的Scala代码:
object Doer{
def doStuff(op: => Unit) {
op
}
}
Run Code Online (Sandbox Code Playgroud)
以这种方式调用:
Doer.doStuff{
println("Done")
}
Run Code Online (Sandbox Code Playgroud)
对我来说奇怪的是函数如何作为花括号之间的代码块传递给另一个函数.甚至没有括号通常标记参数列表的开头和结尾.
这个Scala语法/功能的名称是什么?在什么情况下我可以使用它?它在哪里记录?
我们使用Guice Persist在我们的项目中注入EntityManager.
例如
public class MyDao{
@Inject
EntityManager em;
public void someMethod(){
//uses em instance
}
}
Run Code Online (Sandbox Code Playgroud)
但我们还不清楚如何使用注入的实例EntityManager.
当我处理小型桌面项目时,我曾经lib在项目的根目录中创建文件夹,在那里我保留了所有项目的jar依赖项.然后我使用配置构建路径 - > 库 - > 添加JAR ...来手动将此文件夹中的所有jar添加到buildpath/classpath.而且因为添加JAR ...(与添加外部JAR不同)使用相对路径,项目是可移植的,这对我来说很重要.
问题是每次我从我的lib文件夹中添加或删除一个jar时,我需要在项目构建路径设置中手动添加/删除这个jar(当然我经常忘记这样做).
有没有办法告诉Eclipse"这是我保存所有罐子的文件夹.请将所有罐子自动添加到buildpath/classpath"?我试图将此文件夹视为类文件夹(Add class folder...),但它不起作用:(.
PS我知道Maven和Eclipse-Maven集成,但我想保持我的小项目很简单(Maven集成有时令人沮丧,所以我宁愿在这些项目中避免它),所以请不要在回答中提出这个建议.另外正如我所提到的,这些是桌面项目,因此WEB-INF/lib我的项目中没有通常由Java EE插件自动处理的文件夹.
我们在项目中依赖Eclipse格式化程序来强制执行格式约定.它很棒,我们非常喜欢它.
我们将格式化程序文件与源代码控制中的项目保持在一起,并要求每个人将此格式化程序导入Eclipse.唯一严重的问题是,每当有人修改格式化程序并提交更改时,每个团队成员都需要手动"重新导入"格式化程序.并且很容易忘记这样做,所以我们经常最终在团队中使用不同版本的格式化程序.
更新格式化程序文件时,有没有办法让Eclipse自动使用新版本的格式化程序?(我的意思是,我们可以只对Eclipse说"这是格式化程序文件的路径,总是使用此文件的当前版本作为格式化程序"?)这会很棒!
有任何想法吗?
很多时候,我遇到了一个声明,即应用程序应该始终显式关闭它打开的所有资源.
我的编程方法相当务实,我不喜欢盲目地遵循任何我没有明确看到的好处.因此我的问题.
我们假设:
我真的要关心关闭我打开的所有资源吗?我猜我打开的所有资源都将在应用程序/虚拟机退出时关闭/释放.我对吗?
如果这是真的,是否有任何令人信服的理由关心在如此短小的工作申请中关闭资源?
更新:
这个问题纯属假设,但不关心这个问题的论点是,我可能只是在一起编写一些快速脚本,并且不想编写与手头问题没有直接关系的任何不必要的代码:关闭资源,完成所有这些详细的try-catch-finally东西,处理我不关心的异常等.
问题的关键是不做是否有任何实际后果.
我有简单的测试用例:
@Test
public void test() throws Exception{
TableElement table = mock(TableElement.class);
table.insertRow(0);
}
Run Code Online (Sandbox Code Playgroud)
其中TableElement是GWT类,其方法insertRow定义为:
public final native TableRowElement insertRow(int index);
Run Code Online (Sandbox Code Playgroud)
当我开始测试时,我得到:
java.lang.UnsatisfiedLinkError: com.google.gwt.dom.client.TableElement.insertRow(I)Lcom/google/gwt/dom/client/TableRowElement;
at com.google.gwt.dom.client.TableElement.insertRow(Native Method)
Run Code Online (Sandbox Code Playgroud)
我相信哪个与insertRow方法有关.有没有办法或解决方法来模拟Mockito的这些方法?
我需要使用@OrderBy(JPA,Hibernate作为提供者)来为嵌套属性排序集合:
@OneToMany(mappedBy = "paramSpec", cascade = CascadeType.ALL)
@OrderBy("release.ordinal")
private List<PkdbParameter> pkdbParams;
Run Code Online (Sandbox Code Playgroud)
在PkdbParameter.java中:
...
@ManyToOne
@JoinColumn(name = "release_id")
private Release release;
...
Run Code Online (Sandbox Code Playgroud)
在Release.java中:
...
private int ordinal;
...
Run Code Online (Sandbox Code Playgroud)
(所有这些字段都提供简单的getter和setter)
不幸的是我收到了错误:
Caused by: org.hibernate.AnnotationException: property from @OrderBy clause not found: some.package.PkdbParameter.release.ordinal
这段代码出了什么问题?如果不可能使用嵌套属性表示法有没有其他方法来订购ordinal属性?