我正在编写一个独立的实用程序,给定一个包含JPA-2注释持久性单元的jar,需要以编程方式获取特定持久性单元中所有@Entity类的列表.
我想决定采用哪种方法来获取这些信息,以及为什么; 或者如果有另一种更好的方式我没有想到.
Java程序将jar放在类路径上,使用JavaSE方法从jar中的类创建持久性单元.然后它使用javax.persistence类来获取JPA Metamodel,从中拉回类令牌列表.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MY_ PERSISTENCE_UNIT");
Metamodel mm = emf.getMetamodel();
// loop these, using getJavaType() from Type sub-interface to get
// Class tokens for managed classes.
mm.getManagedTypes();
Run Code Online (Sandbox Code Playgroud)
程序扫描指定jar中的目录和文件以获取persistence.xml文件,然后找到具有指定持久性单元名称的文件.然后XPath文件获取<class>XML元素列表并从那里读取完全限定的类名.从名称,构建类标记.
我是一名学习Java EE的.NET开发人员.这两个概念似乎在任一系统中都具有相同的用途.
那么哪个框架可以用来发明它们呢?
有没有办法告诉,只使用ADODB.Connection对象,它是否当前涉及一个事务?
我希望能够在连接对象本身上测试它,而不依赖于更新旁边的布尔值.
在我正在处理的项目的许多类中,我看到名为CLASS_NAME的私有静态最终成员,其定义如下:
public class MyClass {
private static final String CLASS_NAME = MyClass.class.getName();
//...
}
Run Code Online (Sandbox Code Playgroud)
这样做有什么好处来获取类名,而不是MyClass.class.getName()直接在需要名称的地方进行调用?
有没有什么方法可以让Eclipse强调使用==运算符来测试String的相等性?我一直误用而不是打电话.equals().
我真的想把它变成一个警告并需要一个@SuppressWarnings注释去除它,在尚未发生的情况下,我实际上想比较字符串的对象相等性.
我是否可以使用任何工具来帮助在编辑时打破这种坏习惯?
我很好奇为什么要Object.toString()回报这个:
return getClass().getName() + "@" + Integer.toHexString(hashCode());
Run Code Online (Sandbox Code Playgroud)
与此相反:
return getClass().getName() + "@" + hashCode();
Run Code Online (Sandbox Code Playgroud)
将哈希码显示为十六进制而不是十进制有什么好处?
因此,VB6中的集合会跟踪每个对象的键,您可以通过其键查找对象.
这是否意味着集合被实现为某种哈希表?我意识到你可以在一个集合中拥有多个具有相同键的项目,因此有些东西.
有谁知道VB6集合应该代表什么类型的数据结构?
我正在导入一个已被弃用的类,我不得不使用它.
我想使用@SuppressWarnings("deprecation")注释来抑制已弃用的错误.
根据该注释的评论:
作为一种风格问题,程序员应该始终在最有效的嵌套元素上使用此注释.如果要在特定方法中禁止警告,则应该注释该方法而不是其类.
所以我显然不希望对类进行注释,从而抑制我的类使用的任何类型的弃用警告,但我也想使用该import语句来避免在每个类型上键入完全限定的类型名称,该名称跨越我的整个监视器.使用已弃用的类.
我想我想做一些事情,比如import用@SuppressWarnings(不可能)注释语句或在@SuppressWarnings注释中指定哪种类型忽略警告(例如@SuppressWarnings("deprecation", "fully.qualified.type.name").
我想向编译器表明"如果我使用这个,这是可以的,只有这个,不推荐使用的类,由其简单名称引用,在这个其他类中的任何地方,以及我引用你的任何其他已弃用的类应该让我知道" .
有这样的东西吗?
public class Test {
public static void main(String[] args) throws Exception {
A aObject = new A();
ReferenceQueue<A> queue = new ReferenceQueue<>();
PhantomReference<A> weak = new PhantomReference<>(aObject, queue);
aObject = null;
System.gc();
TimeUnit.SECONDS.sleep(1);
System.out.println(queue.poll());
}
}
class A{
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
System.out.println("finalize");
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
finalize
null
Run Code Online (Sandbox Code Playgroud)
但如果我删除A类中的finalize方法,结果是:
java.lang.ref.PhantomReference@5b2c9e5d
Run Code Online (Sandbox Code Playgroud)
所以,结果显示当我覆盖finalize方法时,弱对象没有被放入引用队列,那是因为aObject复活了吗?但我在finalize方法中没有做任何事情
Checkstyle抱怨以下内容:
return (null == a ? a : new A());
Run Code Online (Sandbox Code Playgroud)
并且说这些是不必要的.
虽然声明在没有它们的情况下确实可以正常工作,但它们在现在看起来更具可读性 - 否则当我读它时我倾向于看到:
return null
Run Code Online (Sandbox Code Playgroud)
首先,然后必须暂停考虑剩下的
== a ? a : new A();
Run Code Online (Sandbox Code Playgroud)
部分,因为我的大脑已经走了一条路.
此外,每当我看到三元运算符时,我倾向于做同样的事情,除非它被分组为parens.
所以:围绕三元的parens应该是事实上的标准吗?有没有理由不把它们放在那里?