有没有办法从Java中的匿名内部类访问调用者范围的变量?
以下是了解我需要的示例代码:
public Long getNumber(final String type, final String refNumber, final Long year) throws ServiceException {
Long result = null;
try {
Session session = PersistenceHelper.getSession();
session.doWork(new Work() {
public void execute(Connection conn) throws SQLException {
CallableStatement st = conn.prepareCall("{ CALL PACKAGE.procedure(?, ?, ?, ?) }");
st.setString(1, type);
st.setString(2, refNumber);
st.setLong(3, year);
st.registerOutParameter(4, OracleTypes.NUMBER);
st.execute();
result = st.getLong(4) ;
}
});
} catch (Exception e) {
log.error(e);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
代码位于DAO服务类中.显然它不会编译,因为它要求result是final,如果是 - 它不会编译,因为我尝试修改最终的var.我被JDK5绑定了.除了doWork()完全放弃之外,有没有办法从内部设置结果值doWork()?
如何根据登录用户的角色呈现JSF组件?我知道外部上下文暴露了主体,但是我应该如何在JSF中正确地进行呈现?在JSP中它会是这样的
<% isUserInRole(Roles.ADMIN) { %>
<button>Edit!</button>
<% } %>
Run Code Online (Sandbox Code Playgroud)
我如何以最好的方式在JSF中编写这个?我最好的猜测是渲染属性绑定到一个返回布尔值的支持bean的方法,但如果我必须只为管理员渲染一些导航项,那将引入一个无关的支持bean ...
Glassfish V3.1,JSF 2.x
Class.forName()结果是通用类型时如何调用?通常我都可以使用asSubclass(),但是在这里,我看到的唯一方法就是演员阵容,当其他所有东西都很好地输入泛型时,它会突然出现并让我烦恼.
场景如下:
有一个带有一个入口点主类的.jar main().它需要一个类名的选项(以及其他一些,在这里无关紧要).给出了类的实现Callable<Integer>.此类已加载,初始化和启动.
这是我需要的一个例子:
Class<? extends Callable<Integer>> clazz = (Class<? extends Callable<Integer>>) Class.forName(options.valueOf(className)).asSubclass(Callable.class);
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱那个演员?
使用SE6.
我正在使用Boost.Asio进行网络操作,他们必须(实际上,可以,没有复杂的数据结构或任何东西)保持相当低的水平,因为我无法负担序列化开销的奢侈(和我发现的libs提供足够好的表现似乎非常适合我的情况).
问题在于我正在从客户端进行异步写入(在QT中,但这应该与此无关).在指定的回调中async_write,永远不会被调用,而且我完全不知道为什么.代码是:
void SpikingMatrixClient::addMatrix() {
std::cout << "entered add matrix" << std::endl;
int action = protocol::Actions::AddMatrix;
int matrixSize = this->ui->editNetworkSize->text().toInt();
std::ostream out(&buf);
out.write(reinterpret_cast<const char*>(&action), sizeof(action));
out.write(reinterpret_cast<const char*>(&matrixSize), sizeof(matrixSize));
boost::asio::async_write(*connection.socket(), buf.data(),
boost::bind(&SpikingMatrixClient::onAddMatrix, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}
Run Code Online (Sandbox Code Playgroud)
它调用第一次写入.回调是
void SpikingMatrixClient::onAddMatrix(const boost::system::error_code& error, size_t bytes_transferred) {
std::cout << "entered onAddMatrix" << std::endl;
if (!error) {
buf.consume(bytes_transferred);
requestMatrixList();
} else {
QString message = QString::fromStdString(error.message());
this->ui->statusBar->showMessage(message, 15000);
}
}
Run Code Online (Sandbox Code Playgroud)
即使服务器接收到所有数据,也不会调用回调.任何人都可以想到它可能会这样做的任何原因吗?
PS这个连接有一个包装器,是的,可能会有一个连接器.一两天前放弃它,因为我找不到这个回调的问题.