Java 9在9月21日正式发布,同时Oracle宣布将Java新版本的发布周期调整为每半年一次。目前,Java新版本的开发也已正式进入轨道。就已公开的消息来看,下一个版本的Java预计会在2018年3月发布,版本号将会是18.3,已经规划加入的特性包括JEP 286和296。
根据reddit站点上的讨论,首先更新的是JEP 296,Valhalla预计很快也会加入进来。OpenJDK的主页面则显示,已确定要在18.3版本实现的是JEP 286和296。
JEP 296主要是将JDK仓库群(JDK Repository Forest)合并为一个仓库,旨在降低管理大量仓库群的成本。根据InfoQ之前的报道,该仓库群的合并已经完成。这些软件仓库是在OpenJDK发展史上历次分裂生成的,在OpenJDK 9及以前的版本中将会继续存在。在这次合并操作之前,OpenJDK曾分裂为多个不同的Mercurial软件仓库群,这导致了许多问题,例如不能以原子方式对多个软件仓库应用漏洞修复(Bug Fixes)。在OpenJDK合并完成后,只会有一个软件仓库,并复制在三个开发线上。为了简化仓库的管理,JDK中还创建了用于在合并和未合并版本间移动更改的工具。
JEP 286提议在Java中引入局部变量的类型推断,该JEP在2016年提出,InfoQ曾经报道过该JEP的概况和相关的开发者调查结果。该JEP旨在减少编写Java代码相关的仪式性的内容,提升开发人员的体验,同时还要保证Java语言的静态性。它会减少开发人员在声明局部变量时,没有必要的变量类型声明。如果该JEP实现的话,在声明局部变量的时候,就可以采用类似如下的方式:
var list = new ArrayList(); // infers ArrayList var stream = list.stream(); // infers Stream
这种语句只能用于带有初始化器(initializer)的局部变量、增强的for-loop中的索引以及传统for-loop中声明的局部变量。它不能用于方法声明、构造函数声明、方法返回值、字段、catch语句以及其他类型的变量声明中。
关于局部变量的类型推断,不管是JVM体系中的语言还是其他语言都提供了一定形式的支持,比如C++(auto)、C#(var)、Scala(var/val)以及Go(通过:=进行声明)。至于该使用var作为关键字,还是使用let或类似于C/C++中的auto作为关键字,之前曾经有过一个面向开发者的调查。大约84%的回答表明定义可变内容的变量用关键字var是恰当的,只有百分之几的回答者建议使用auto更合适。根据Java语言架构师Brian Goetz介绍,该功能应该使用关键词var。
关于该特性的用法,在reddit上有一些讨论。有人表示,即便在支持“auto”语法的语言中,该特性使用的也比较少,因为有些人希望一眼就能看出变量的类型是什么。也有人认为,var有它的适用空间,在小的代码块中,直接用它实例化对象是可以的。如果是作为方法返回值的话,还是希望明确声明类型,Java的类型推断并不支持方法返回值,这一点倒不必担心。如果函数或代码块比较长的话,就不建议使用var了并要考虑适时进行代码的重写。时间和经验将会让我们更加明确应该在何时使用新功能,就像Optional刚出现时,也是耗费了一些时间才明确其推荐适用场景。
Valhalla项目中包含了一些有趣的JEP,包括值类型(Value Type)、针对原始类型实现泛型功能、增强的volatile等,外界很期待这些内容最终也能添加到新版本中。
2017慧都十四周年狂欢搞事情!砸金蛋100%抽现金红包、满额豪送iPhone X、iPhone 8、DevExpress汉化免费送、团队升级培训套包劲省10万元......更多惊喜等您来探索!

试用、下载、了解更多产品信息请点击"咨询在线客服"
作为LEADTOOLS v19更新的一部分,新版本向Document Viewer添加了一个新的虚拟文档功能。 LEADTOOLS Document Composer界面可以轻松地从任意数量的页面以及来自多个源文档的文件中创建虚拟文档。你可以在查看该文档时进行修改,并可以使用代码添加或删除页面,也可以使用拖放来进行交互式操作。由Document Composer创建的虚拟文档可以保存在服务器上,与多个用户共享,并导出为任何格式。
从任何源文件中构建或撰写文档意味着什么?想象一下,房地产经纪人准备与客户会面,并想要准备几个房产相关的打印资料。他的计算机或云盘上收集了一些文件:PDF格式的列表、DOCX格式的列表、谷歌地图的截图,甚至是访问其他客户时的一些个人照片。房地产经纪人可以使用LEADTOOLS Document Composer从每个源文件中单击并拖动所需的页面并创建新的虚拟文档,然后将其打印出来参与会议,也可以将虚拟文档导出为新的PDF并通过电子邮件发送。
如果你想要尝试该功能,请查看Document Composer演示应用程序,或直接下载最新的LEADTOOLS安装程序!
Essential Studio企业版是一个企业级界面开发工具包,包含800多个.NET和JavaScript平台的组件和框架。使用Essential Studio企业版,开发者可以创建丰富的应用程序,并轻松地集成商业智能分析和报告解决方案。Essential Studio企业版是世界级的软件组件,它使得开发者能在最苛刻的环境下开发出高质量的软件。
Essential Studio 2017 v4最新版下载>>>
Essential Studio 2017 v4更新内容
JavaScript

充分利用JavaScript
• Essential JS 2是下一代的JavaScript组件套件
• 支持Ember框架
• 新的组合框架
Xamarin.Forms

构建跨平台的应用程序
• 新的图表控件
• 数据网格的多列分组
• 图像编辑器的缩放和平移功能
Xamarin.iOS

用C#创建优秀的iOS应用程序
• 新的图表控件
• 图像编辑器的缩放和平移功能
Xamarin.Android

用C#开发Android应用程序
• 新的图表控件
• 图像编辑器的缩放和平移功能
ASP.NET Core

发布卓越的Web应用程序
• 新的日期范围选择器
• 新的组合框
• 新的pivot客户端控件
ASP.NET MVC

创建Web应用程序
• 新的组合框
• 服务器下拉列表
• 树形网格控件的堆叠标题
ASP.NET Web Forms

开发大师级网站
• 新的组合框
• 服务器下拉列表
• 树形网格控件的堆叠标题
UWP

开发跨Windows生态系统
• 新的图像编辑器
• 史密斯图
• 支持富文本框从右到左
WPF

桌面控制
• 史密斯图
• 数据网格的行拖放
• 支持富文本框从右到左
Windows Forms

创建更好的APP
• 电子表格的数组公式计算
• 日期时间选择器的Office 2016主题
• ribbon控件的快速访问工具栏图标功能
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Forms;
using Leadtools.Barcode;
using Leadtools.ImageProcessing;
public void BarcodeData_GetDataExample()
{
string imageFileName = Path.Combine(LEAD_VARS.ImagesDir, "Barcode2.tif");
// Create a Barcode engine
BarcodeEngine engine = new BarcodeEngine();
// Load the image
using (RasterCodecs codecs = new RasterCodecs())
{
using (RasterImage image = codecs.Load(imageFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1))
{
// Read the first QR barcode from the image
BarcodeData data = engine.Reader.ReadBarcode(image, LogicalRectangle.Empty, BarcodeSymbology.QR);
// Show the barcode data found (if any)
if (data != null)
{
Console.WriteLine("Raw data is:");
byte[] bytes = data.GetData();
if (bytes != null)
{
string text = System.Text.Encoding.UTF8.GetString(bc);
Console.WriteLine(text);
}
else
{
Console.WriteLine("Empty");
}
}
else
{
Console.WriteLine("No barcode found");
}
}
}
}

微软在2017年9月发布的免费开源代码编辑器Visual Studio Code(v1.17)进行了一些重要的更新。支持将区域标记带入代码折叠,并提升内置终端的性能。
通过代码折叠,开发人员可以使用行号之间的折叠图标和一行代码的开始来隐藏源代码区域。区域标记允许您使用注释来精确指定可折叠块的开始和结束位置。目前已经为TypeScript、JavaScript、C和C ++、C#、F#、PowerShell和Visual Basic定义了标记。
1.17版本也是一款基于画布的渲染引擎,具有集成终端功能,可根据情况将渲染从5提升到45倍。微软表示:“这种改变减少了输入延迟、功耗,并显着提高了终端的帧速率。”集成终端可以节省开发人员的时间,不必切换窗口或更改现有终端状态,以便快速执行命令行任务。
Visual Studio Code现在有一个源代码管理提供程序,提供了多个可以由SCM提供程序提供的存储库的概述。例如,Git存储库可以与Microsoft Team Foundation Server工作区并排维护。用户可以利用Ctrl+单击或Shift单击功能来选择多个存储库,这些存储库显示为拆分视图。
对于Mac用户来说,Visual Studio Code1.17增加了在MacOS Touch Bar中显示操作的支持。可以在编辑器历史记录中导航并控制调试器。此外,扩展项可以用于通过touchBar菜单标识符向Touch Bar添加命令。同时也为MacOS Sierra添加了本地窗口选项卡的支持。
最后,Visual Studio Code现在为Java开发人员提供了新的在线文档。Java调试最近通过扩展添加到了Visual Code中。
有关Visual Studio的更多信息,请参阅慧都控件网Visual Studio。




| Private Sub Form_Load() EDOffice1.OpenFileDialog'EDOffice1.OpenWord “d:\ test.xlsx” 'EDOffice1.Open“d:\ test.xls”,“Excel.Application” End Sub |
| Private Sub EDOffice_DocumentOpened() EDOffice1.ProtectDoc 1'XlProtectTypeNormal End Sub |
| bool ExcelAddWorkSheet(long Index); bool ExcelDeleteWorkSheet(long Index); bool ExcelActivateWorkSheet(long Index); 长ExcelGetWorkSheetCount(); bool ExcelSetCellValue(long Column,long Row,BSTR Value); BSTR ExcelGetCellValue(长列,长行); bool ExcelSetRowHeight(long Row,double Height); bool ExcelSetColumnWidth(long Column,double Width); afx_msg bool ExcelDeleteRow(long Row); bool ExcelDeleteColumn(long Column); bool ExcelInsertRow(long Row); bool ExcelInsertColumn(long Column); bool ExcelInsertPageBreakInRow(long Row); bool ExcelInsertPageBreakInColumn(long Column); bool ExcelCopyToClipboard(); bool ExcelPasteStringToWorksheet(BSTR bstText); |
Private Sub Command1_Click() Dim oXL As Excel.Application Set oXL = EDOffice1.GetApplication() Dim oWB As Excel.Workbook Set oWB = EDOffice1.ActiveDocument() Dim oSheet As Excel.Worksheet Dim oRng As Excel.Range Set oSheet = oWB.ActiveSheet oSheet.Cells(1, 1).Value = "First Name" oSheet.Cells(1, 2).Value = "Last Name" oSheet.Cells(1, 3).Value = "Full Name" oSheet.Cells(1, 4).Value = "Salary" ' Format A1:D1 as bold, vertical alignment = center. With oSheet.Range("A1", "D1") .Font.Bold = True .VerticalAlignment = xlVAlignCenter End With ' Create an array to set multiple values at once. Dim saNames(5, 2) As String saNames(0, 0) = "John" saNames(0, 1) = "Smith" saNames(1, 0) = "Tom" saNames(1, 1) = "Brown" saNames(2, 0) = "Sue" saNames(2, 1) = "Thomas" saNames(3, 0) = "Jane" saNames(3, 1) = "Jones" saNames(4, 0) = "Adam" saNames(4, 1) = "Johnson" ' Fill A2:B6 with an array of values (First and Last Names). oSheet.Range("A2", "B6").Value = saNames ' Fill C2:C6 with a relative formula (=A2 & " " & B2). Set oRng = oSheet.Range("C2", "C6") oRng.Formula = "=A2 & "" "" & B2" ' Fill D2:D6 with a formula(=RAND()*100000) and apply format. Set oRng = oSheet.Range("D2", "D6") oRng.Formula = "=RAND()*100000" oRng.NumberFormat = "$0.00" ' AutoFit columns A:D. Set oRng = oSheet.Range("A1", "D1") oRng.EntireColumn.AutoFit oXL.UserControl = True End Sub |
