我只是在查看List接口中定义的方法:
以正确的顺序返回包含此列表中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型.如果列表适合指定的数组,则返回其中.否则,将使用指定数组的运行时类型和此列表的大小分配新数组.如果列表适合指定的数组,并且空间足够(即,数组的元素多于列表),则紧跟集合结尾的数组中的元素将设置为null.仅当调用者知道列表不包含任何null元素时,这在确定列表长度时很有用.
Run Code Online (Sandbox Code Playgroud)<T> T[] toArray(T[] a);
而我只是想知道为什么它以这种方式实现,基本上如果你传递一个长度为<listTeize()的数组,它只会创建一个新的并返回它.因此,在方法参数中创建新的Array对象是没用的.
另外,如果你使用列表的大小传递一个足够长的数组,如果返回与对象相同的对象 - 返回它真的没有意义,因为它是同一个对象但是为了清晰起见.
问题是我认为这会促使代码效率稍低,在我看来,Array应该只是接收类并只返回带有内容的新数组.
有没有理由说它没有这样编码?
我不确定是否有办法在Velocity中执行此操作:
我有一个用户POJO,其中一个名为Status的属性,看起来像一个枚举(但它不是,因为我被困在Java 1.4上),定义看起来像这样:
public class User {
// default status to User
private Status status = Status.USER;
public void setStatus(Status status) {
this.status = status;
}
public Status getStatus() {
return status;
}
Run Code Online (Sandbox Code Playgroud)
而Status是一个静态的内部类:
public static final class Status {
private String statusString;
private Status(String statusString) {
this.statusString = statusString;
}
public final static Status USER = new Status("user");
public final static Status ADMIN = new Status("admin");
public final static Status STATUS_X = new Status("blah");
//.equals() and .hashCode() implemented as …Run Code Online (Sandbox Code Playgroud) 我有一个需要连接到多个数据库的应用程序.这是一个管理应用程序,主要用于管理不同数据库中的条目 - 我们不需要同时访问多个数据库,也不需要任何类型的分布式事务管理.
基本上,应用程序的一个区域允许您在数据库A中创建小工具,而应用程序的另一个区域允许您在数据库B中配置类似的小工具.
当使用一个数据源时,我们已经设置了事务并且工作正常.配置如下所示:
<aop:config>
<aop:pointcut id="companyServicePoint"
expression="execution(* com.company.service.CompanyService.*(..))" />
<aop:advisor advice-ref="companyServiceTxAdvice"
pointcut-ref="companyServicePoint"/>
</aop:config>
<tx:advice id="companyServiceTxAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- set propogation required on create methods, all others are read-only -->
<tx:method name="create*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
Run Code Online (Sandbox Code Playgroud)
这为任何执行任何方法设置切入点CompanyService,并将事务通知与切入点相关联,切入点需要对名称以"create"开头的任何方法进行事务处理.事务通知与TransactionManager相关联,该TransactionManager与dataSource相关联.
添加第二个(或更多)数据源时,如何将相同的事务建议应用于其他数据源?由于AOP建议只能与一个只能与一个dataSource关联的transactionManager关联,我是否需要设置重复的事务建议?
如果我为同一个切入点设置重复的事务建议,这是否意味着我的CompanyService接口中的任何方法调用都需要对我的所有 dataSource 进行传播?
为了使我的上一个问题更加清晰,我将声明多个bean实现CompanyService接口,并且每个bean都有一个单独的bean CompanyDAO来访问它们各自的DataSource.我担心这种方法意味着当companyService1调用bean 时,将在allcompanyService beans/dataSources 上触发事务建议.
我是以错误的方式来做这件事的吗?
更新:我实际上已经测试了我上面谈到的配置(将两个顾问程序连接到同一个切入点),并且在CompanyService实现的任何单个实例上调用任何方法确实在两个dataSource上创建了新的事务,正如预期的那样:
DEBUG company.serviceDataSourceTransactionManager - Creating new …Run Code Online (Sandbox Code Playgroud) Spring框架是非 - INTRUSIVE.
你能详细说明一下吗?
谢谢 :)
我经常处于这样一种情况:我有一种方法会出现问题但是例外情况不适合使用,因为它并不例外.
例如:
我正在设计一个垄断游戏.类银行有一个方法buyHouse和一个计算剩余房屋数量的字段(垄断中有32个房屋).可能出错的是玩家在剩下0时买房子.我该怎么办呢 这是我能提出的3种方法.
1. public void buyHouse(Player player, PropertyValue propertyValue)
{
if(houseCount < 0) throw new someException;
....
//Not really an exceptional situation
}
2. public boolean buyHouse(Player player, PropertyValue propertyValue)
{
if(houseCount < 0) return false;
....
//This I think is the most normal approach but changing something
//and returning if it was a success seems bad practice to me.
}
3. public boolean housesLeft()
{
if(houseCount > 0) return true;
return false;
//Introducing a new method. But …Run Code Online (Sandbox Code Playgroud) 我有两个对象形成父子关系,它们具有多对多的关系.按照Hibernate参考手册中的建议,我使用连接表映射了这个:
<class name="Conference" table="conferences">
...
<set name="speakers" table="conference_speakers" cascade="all">
<key column="conference_id"/>
<many-to-many class="Speaker" column="speaker_id"/>
</set>
</class>
<class name="Speaker" table="speakers">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="firstName"/>
<property name="lastName"/>
</class>
Run Code Online (Sandbox Code Playgroud)
我希望单个演讲者可以与许多不同的会议相关联,而且任何会议不再引用的演讲者都会从speakers表格中删除(因为没有相关会议的演讲者在我的项目中没有多大意义) ).
但是,我发现,如果我使用cascade="all-delete-orphan",那么如果只从其中一个会议中删除与多个会议相关联的扬声器,则Hibernate会尝试删除扬声器实例本身.
下面是一个显示此行为的单元测试:
@Test
public void testRemoveSharedSpeaker() {
int initialCount = countRowsInTable("speakers");
Conference c1 = new Conference("c1");
Conference c2 = new Conference("c2");
Speaker s = new Speaker("John", "Doe");
c1.getSpeakers().add(s);
c2.getSpeakers().add(s);
conferenceDao.saveOrUpdate(c1);
conferenceDao.saveOrUpdate(c2);
flushHibernate();
assertEquals(initialCount + 1, countRowsInTable("speakers"));
assertEquals(2, countRowsInTable("conference_speakers"));
// the …Run Code Online (Sandbox Code Playgroud) 分析了在tomcat中运行的轻量级Web应用程序,使用JMX控制台,结果发现"PS Old Gen"正在缓慢但不变地增长.它从200MB开始,每小时增长约80MB.
CPU不是问题,它平均运行在0-1%,但它在某处泄漏内存,因此在部署后几天它会变得不稳定.
我如何找出堆上分配的对象?你知道有什么好的教程或工具吗?
我对面向对象编程比较陌生.我非常理解这些概念,但实际上,我很难找到有关如何在我的Zend Framework应用程序中最好地使用模型的信息.
具体来说,我有一个不使用数据库表的模型(不扩展任何东西).它使用getter和setter来访问其受保护的成员.我发现自己正在努力学习如何在视图中最好地展示这个模型.我在视图模板中不需要逻辑,但我发现自己处于以下情况:
在我的控制器中:
$object = new Object();
$object->setName('Foo Bar');
$this->view->object = $object;
Run Code Online (Sandbox Code Playgroud)
在我的视图模板中:
<h2><?= $this->object->getName() ?></h2>
Run Code Online (Sandbox Code Playgroud)
我真的不喜欢在我的视图模板中调用函数,但我不知道更好的方法.我不希望我的模型成员公开,但我基本上想要达到相同的结果:
<h2><?= $this->object->name ?></h2>
Run Code Online (Sandbox Code Playgroud)
我不希望我的控制器完成所有关于模型的所有工作:
$object = new Object();
$object->setName('Foo Bar');
$this->view->object = $object;
$this->view->object->name = $object->getName();
Run Code Online (Sandbox Code Playgroud)
在Zend Framework中使用模型的最佳实践是什么?任何人都可以推荐任何可以帮助我理解Zend Framework中的模型/视图困境的教程吗?
我们的Web应用程序中的一个页面使用jQuery的ajax()方法大约每10秒轮询一次服务器以获取新数据.我们通常有几百名用户同时查看此页面,因此我们的服务器每秒会收到多个请求.负载不是任何问题.
对于我们访问者中的一小部分,jQuery ajax()调用会偶尔触发它的错误事件.大多数这些错误事件都是明显的错误(例如访问者遇到网络问题时超时),但是这些错误中的一小部分我很难找到原因,而且我有点困惑.
我们正在连接一个像这样的全局错误监听器
$.ajaxSetup({
timeout: oursettings.timeout,
error: function(xhr, status, e){
// error handling goes here
}
});
Run Code Online (Sandbox Code Playgroud)
对于这个特定的错误子集,jQuery给我们带来了status一些"error".通过jQuery源代码(特别是第3574行)读取错误仅在XmlHttpRequest readystate具有值4(意味着它DONE)并且HTTP响应状态超出成功值(< 200或>= 300)时使用此值抛出.
但是,当我们检查XmlHttpRequest对象本身时,我们发现它的(HTTP响应)状态为0.根据XHR规范,当"错误标志为真"时,应设置状态0 .
这是我真的很困惑的地方,因为XmlHttpRequest规范中关于"错误标志" 的唯一其他事情是
DONE状态具有相关的错误标志,指示某种类型的网络错误或堕胎.它可以是true或false,初始值为false.
规范没有说明保留这个错误标志的属性或位置(即,它是否可用xhr.error?).
所以我想我的问题归结为:这将是正确的我们的Ajax的错误处理代码假设击中我们的错误处理程序与jQuery的状态的任何事件"error"和xhr.status的0,以引起仅通过"网络错误或流产"?
是否有任何其他条件或任何其他人看到的可能导致XmlHttpRequest readystate DONE (4)的HTTP响应状态为0?我希望能够排除服务器端错误的任何可能性(因为我们的服务器端日志没有显示任何内容),并且要更改错误处理逻辑以不将此方案视为致命错误(这导致用户看到一堆大红色警报类型错误消息).
public interface ITaskProvider
{
T GetTask<T>();
}
Run Code Online (Sandbox Code Playgroud)
在下面的ITaskprovider的实现中,正如您所看到的那样,IUserTask和IIdentityTask是从属性而不是构造函数注入的.原因是Windsor在访问时自动实例化运行时注入的属性,因此我不必将所有必须注入的依赖项放在构造函数中.
public class TaskProvider : ITaskProvider
{
public IUserTasks UserTasks { get; set; }
public IIdentityTasks IdentityTasks { get; set; }
public T GetTask<T>()
{
Type type = typeof(T);
if (type == typeof(IUserTasks)) return (T)this.UserTasks;
if (type == typeof(IIdentityTasks)) return (T)this.IdentityTasks;
return default(T);
}
}
Run Code Online (Sandbox Code Playgroud)
在控制器中,我在构造函数中注入ITaskProvider.
public ITaskProvider TaskProvider { get; set; }
public AuctionsController(ITaskProvider taskProvider)
{
TaskProvider = taskProvider;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我称任务提供者及其方法很好.
public ActionResult Index()
{
var userTasks = TaskProvider.GetTask<IUserTasks>();
var user = …Run Code Online (Sandbox Code Playgroud)