我有以下静态工厂方法,从int数组创建列表视图:
public static List<Integer> newInstance(final int[] numbers) {
return new AbstractList<Integer>() {
@Override
public Integer get(int index) {
return numbers[index];
}
@Override
public int size() {
return numbers.length;
}
};
}
public static void main(String[] args) {
int[] sequence = {10, 20, 30};
List<Integer> list = ListFactory.newInstance(sequence);
System.out.println("List is "+list);
}
Run Code Online (Sandbox Code Playgroud)
在"Effective Java"中,Joshua Bloch提到了这一点
作为适配器,允许将int数组视为Integer实例列表.
但是,我记得Adapter使用组合,匿名列表实现的实例应该使用int []作为成员字段.
如果int []输入参数不是匿名列表实现的成员字段,那么它究竟存储在哪里?
如果有人能提供一些见解或一些链接来寻找更多信息,我将不胜感激.
因为调用flush()来使每个实体从内存持久存储到数据库.因此,如果我使用调用太多不必要的flush(),则可能需要很长时间,因此不是性能的好选择.这是一个我不知道何时调用flush()的场景?
//Order and Item have Bidirectional Relationships
Order ord = New ord("my first order");
Item item = New Item("tv",10);
//...process item and ord object
em.persist(ord);//em is an instance of EntityManager
em.flush();// No.1 flush()
item.setOrder(ord);
em.persist(item);
Set<Item> items= new HashSet<Item>();
items.add(item);
ord.setItems(items);
em.flush();// No.2 flush()
Run Code Online (Sandbox Code Playgroud)
我的问题是:拨打第1号同花顺是否可以避免?
我担心的是:为了执行item.setOrder(ord),我们需要一个ord的数据库ID.并且只调用em.persist(ord)无法生成数据库ID,因此我必须在item.setOrder(ord)之前调用em.flush().那么你们的观点是什么?
提前致谢.
可能重复:
为什么我们在内部类中没有静态方法?
我知道创建一个非静态内部类对象需要一个外部类对象,而创建的非静态内部类对象自动拥有一个对外部类对象的隐藏引用.但为什么非静态内部类不能有静态成员呢?Java设计者只需要禁止在内部类的静态方法内访问非静态外部类字段,它会更有意义,非?
如果在内部类中使用静态成员没有意义,为什么内部类可以通过继承具有静态成员的类来继承静态成员?
我也读了这篇文章.如上所述:
内部类可以继承非编译时常量的静态成员,即使它们可能不会声明它们.不是内部类的嵌套类可以根据Java编程语言的通常规则自由地声明静态成员.
这是一个惯例吗?
这是我的代码:
public class OuterClass {
private int outerClassField;
public void doSomethingOuterClass() {
outerClassField = 1;
}
public static void doSomethingStaticOuterClass() {
// outerClassField = 2; // Error: Because static method cannot access an specific object's field
}
public class InnerClass extends ClassWithStaticField {
// Error: Why a non-static inner class cannot have static fields ?
// public static int innerClassStaticField = 1;
public void doSomethingInnerClass() {
outerClassField = 3;
staticField = …Run Code Online (Sandbox Code Playgroud) 我有一个简单的类Apple扩展自另一个简单的类Fruit.
在运行时,我可以使用
Fruit fruit = new Apple();
fruit.getClass();
Run Code Online (Sandbox Code Playgroud)
获取实际类型的水果对象,即Apple.class.
我也可以使用fruit instanceof Apple,并fruit instanceof Fruit验证这个水果对象是Apple还是Fruit的实例.这两个表达式都返回true,这是正常的.
但有没有办法确定fruit标识符的声明类型?在这种情况下是Fruit.
我在我的应用程序中使用Hibernate二级缓存,由于某些商业原因我不能再更改实体注释.
在我的项目中,除了从Hibernate更改数据库之外,还存在其他未通过Hibernate的本机SQL.因此,从本机SQL更新数据库后,Hibernate二级缓存数据可能会过时.这就是为什么我想为某些实体禁用二级缓存(以编程方式或以其他方式更改注释).
提前致谢!
我想在每次发生事件时将(附加文本)记录到文件中.我发现这可能是使用Java 7的try-with-resources语句执行此操作的正确方法:
public void log(String textLine) {
try(PrintWriter output = new PrintWriter(new BufferedWriter(new FileWriter("Logfile.txt", true)))) {
output.println(textLine);
}catch (IOException e) {
//exception handling
}
}
Run Code Online (Sandbox Code Playgroud)
我担心的是这个日志方法被频繁调用,输出被关闭并在每次调用此方法时重新打开,这是不必要的.与此同时,我希望受益于Java 7的try-with-resources语句功能.
我的担忧不是必要的,因为重新打开和关闭作家并不是一项昂贵的操作吗?或者我应该使用Java 6的老式方法,即手动处理异常并将输出声明为成员字段并在应用程序结束时手动关闭输出?
当我在 Mac OSX 中的任何 IDE(IntelliJ 或 Eclipse)中使用快捷方式时,我必须按fn+ 功能键 ( F1- F12)。有没有办法避免它,这样我只需按功能键(F1- F12)?同时,当我不在 IDE 中时,我想像往常一样使用功能键作为应用程序控制。
从我的sql日志文件中,我认为QueryCache的物理属性是由元素配置的:
<defaultCache
maxElementsInMemory="0"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
/>
Run Code Online (Sandbox Code Playgroud)
甚至我将下面的元素添加到ehcache.xml中的另一个元素,从sql日志看来,QueryCache的物理属性仍然是由 元件.
<cache name="org.hibernate.cache.QueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
/>
Run Code Online (Sandbox Code Playgroud)
我只想在内存中启用QueryCache,同时默认禁用其他(在内存中).也许是.的名字属性元素不正确?我从书<>中复制它.或者,我应该使用其他元素吗?也许有一种元素?
谢谢.
java ×7
hibernate ×3
adapter ×1
annotations ×1
class ×1
eclipse ×1
ehcache ×1
final ×1
flush ×1
java-7 ×1
jpa ×1
macos ×1
non-static ×1
parameters ×1
polymorphism ×1
reflection ×1
runtime ×1
static ×1
writer ×1
xml ×1