以下课程:
class Pizza {
Ingredients ingredients;
Price price;
public setIngredients(Ingredients ing) {
if (ingredients != null) {
throw new IllegalStateException();
}
ingredients = ing;
return this;
}
public setPrice(Price p) {
if (price != null) {
throw new IllegalStateException();
}
price = p;
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
可以在构建器模式中使用,在构建之后,它实际上是不可变的,因为每个属性只能设置一次.那是:
Pizza pizza = new Pizza().setIngredients(something).setPrice(somethingelse);
Run Code Online (Sandbox Code Playgroud)
但是,Pizza它不是线程安全的:不能保证线程B看到线程A设置的成分.有一些方法可以解决它:
final.但是你不能使用构建器模式.volatile.像同步一样感觉浪费.AtomicReference.我的问题是,告诉JVM一个类成员在调用某个方法后不会改变的最佳方法是什么?我应该只是同步对它的访问,并相信JVM会优化锁定吗?它只是感觉浪费,因为我知道成员应该final在它设置之后表现得像它一样.有没有更好的解决方案?
我有一个网络应用程序,客户端已要求查看一些报告.方法是使用iReport并在屏幕上显示报告.
我已经问了这样的事情.但今天我发现报告文件(jrxml)的路径是绝对的.所以我必须更改程序,以便它接受相对路径.我一直在尝试这样做,但似乎jrxml或编译(.jasper)文件都不接受既不编译也不填充报告的相对路径.
这是我迄今为止所得到的:
//path is generated as request.getContextPath() + "/jrxmlFiles/"
public void generateReport(HttpServletResponse res, ConexionAdmin con, String path) throws Exception{
ServletOutputStream out = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
JasperDesign jasperDesign = JRXmlLoader.load(path);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, pars, con.initConexion());
res.setContentType("application/pdf");
res.setContentLength(bytes.length);
out = res.getOutputStream();
out.write(bytes, 0, bytes.length);
res.setHeader("Cache-Control", "cache");
res.setHeader("Content-Disposition", "attachment; filename=report.pdf");
res.setHeader("Pragma", "cache");
res.setContentLength(bos.size());
out.write(bos.toByteArray());
out.flush();
bos.close();
out.close();
res.flushBuffer();
}
Run Code Online (Sandbox Code Playgroud)
这似乎适用于绝对路径,但抛出我:
Exception Message
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException
Run Code Online (Sandbox Code Playgroud)
当改为相对路径时.我在网上搜索没有成功如何改变我的适合度.
我有jasper API的javaDoc,但如果我能帮助它,我宁愿不读它.
如果我有参考Context,是否可以完成当前的活动?
我没有参考当前的活动.
我可以绑定到name属性吗?这似乎不起作用:
<TextBlock Name="FordPerfect" Text="{Binding Path=Name, Mode=OneWay}"/>
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
编辑:
添加ElementName=FordPerfect"解决了问题.我不明白的是为什么只有绑定到Name需要这个,而其他属性没有.
注意:将第二个(设计)问题移到另一个问题(我应该在第一次放置......)
谢谢
我使用代码导出csv文件中的datagridview记录:
using (StreamWriter myFile = new StreamWriter(filename, false, Encoding.Default))
{
string sHeaders = "";
for (int j = 0; j < dGV.Columns.Count; j++)
{
if (dGV.Columns[j].Visible)
{
sHeaders = sHeaders.ToString() + dGV.Columns[j].HeaderText + ", ";
}
}
myFile.WriteLine(sHeaders);
// Export data.
for (int i = 0; i < dGV.RowCount; i++)
{
string stLine = "";
for (int j = 0; j < dGV.Rows[i].Cells.Count; j++)
{
if (dGV.Columns[j].Visible)
{
stLine = stLine.ToString() + dGV.Rows[i].Cells[j].Value.ToString() + ", ";
}
}
myFile.WriteLine(stLine);
} …Run Code Online (Sandbox Code Playgroud) 我使用Asp.net 4和C#Web Forms.
在我的Web应用程序中,用户可以使用TextBox添加URL.
我需要确保插入的每个值都具有语法正确的URL格式(我不需要检查URL是否确实存在).
因此,作为第一条规则,我想使用CustomValidator Controlif 检查用户插入的输入在开头是否具有值字符串"http://".
我的问题?
你能为我提供一个RegEx来添加到我的CustomValidator Control中,它只允许传递以"http://"开头的字符串吗?
你有任何其他规则使用RegEx建议我吗?
检测语法正确的URL的最佳做法是什么?
谢谢你的帮助
如何将varchar参数转换为datetime,如果转换失败使用GetDate()默认值?我试图把它放在Try/Catch中,但显然这在UDF中不起作用.它也不能简单地检查datetime是否为null,因为它会抛出异常('将char数据类型转换为datetime数据类型导致超出范围的datetime值'):
CREATE FUNCTION [dbo].[getRZUInfo]
(
@IMEI varchar(20),
@StrDeliveryDate varchar(20)
)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @Info VARCHAR(8000)
DECLARE @DeliveryDate datetime;
SET @DeliveryDate = Convert(datetime,@StrDeliveryDate,102);
IF @DeliveryDate IS NULL
SET @DeliveryDate=GetDate();
SELECT @Info = COALESCE(@Info + '|', '') + 'TAT_B2B: ' + Convert(varchar,tabData.TAT_B2B) + ', AC' + Convert(varchar,tabData.fimaxActionCode) + ', Diff: ' + Convert(varchar,DateDiff(day,tabData.Received_date,@DeliveryDate))
FROM tabData
WHERE (SSN_Number = @IMEI) AND (Received_Date >= DATEADD(month, -3, @DeliveryDate))
ORDER BY SSN_Number,Received_Date DESC
return @Info
END
Run Code Online (Sandbox Code Playgroud) 我正在使用Intel Mac OS X 10.6.x上的C++应用程序.我有一个变量,它包含使用OpenGL调用glReadPixels获得的像素数据.我想使用x86_64汇编指令直接对像素数据执行一些操作.汇编程序在测试程序中运行良好,但是当我尝试在像素数据上使用它时,它只在像素数据变量指向的内存位置中得到零.我猜这是因为我试图直接从x86_64程序集访问视频内存.有没有办法直接从程序集访问x86_64视频内存?否则我该如何解决这种情况?
感谢任何指针.提前致谢.
请参阅下面的代码示例以翻转最后n个和前n个字节.相同的代码在测试程序中运行良好.
void Flip(void *b, unsigned int w, unsigned int h)
{
__asm {
mov r8, rdi //rdi b
mov r9, rsi //W
mov r10,rdx //H
mov r11, 0 // h <- 0
mov r12, 0 // w<- 0
outloop:
------------
.............
.............
}
Run Code Online (Sandbox Code Playgroud) 有没有办法为堆管理指定我自己的allocator/deallocator函数而不是malloc()/ free()用于bison中的纯推送解析器?