我在Nutshell(O'Reilly)中阅读算法,并在类图中遇到了这个符号.我的猜测是,这意味着会员受到保护,但我想知道是否有人确切知道这意味着什么.
我正在尝试编译以下代码:
private String dataToString(){
Map data = (HashMap<MyClass.Key, String>) getData();
String toString = "";
for( MyClass.Key key: data.keySet() ){
toString += key.toString() + ": " + data.get( key );
return toString;
}
Run Code Online (Sandbox Code Playgroud)
我在for行中遇到错误:
incompatible types found : java.lang.Object required: MyClass.Key
该getData()方法返回一个Object(但在这种情况下Object返回的HashMap结构). MyClass.Key是我为我的应用程序创建的枚举(在另一个类文件中MyClass).
当我创建一个具有相同结构的foreach循环时MyClass.java,我没有遇到这个问题.
我究竟做错了什么?
我正在迭代HashMap(请参阅我之前的问题以获取更多详细信息)并构建一个由Map中包含的数据组成的字符串.对于每个项目,我将有一个新行,但对于最后一项,我不想要新行.我怎样才能做到这一点?我以为我可以这么检查,看看这个条目是否是最后一个,但我不确定如何实际做到这一点.
谢谢!
如何轻松检查一个ArrayList中的所有元素是否都是另一个ArrayList的元素?
我有一个项目需要访问自己的JAR文件中的资源.当我为项目创建JAR文件时,我想将一个目录复制到该JAR文件中(我想ZIP相当于将目录"添加"到现有的ZIP文件中).我只希望在创建JAR之后发生复制(如果我清理并删除JAR文件,我显然不希望复制发生).
目前构建文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project name="foobar" basedir=".." default="jar">
<!-- project-specific properties -->
<property name="project.path" value="my/project/dir/foobar" />
<patternset id="project.include">
<include name="${project.path}/**" />
</patternset>
<patternset id="project.jar.include">
<include name="${project.path}/**" />
</patternset>
<import file="common-tasks.xml" />
<property name="jar.file" location="${test.dir}/foobar.jar" />
<property name="manifest.file" location="misc/foobar.manifest" />
</project>
Run Code Online (Sandbox Code Playgroud)
一些构建任务是从另一个文件(common-tasks.xml)调用的,我无法在此处显示.
有没有办法指定JAXB用于在我的XML模式中封送/解组对象的适配器?
例如,如果我想将以下内容解析为整数:
<SpecialValue>0x1234</SpecialValue>
Run Code Online (Sandbox Code Playgroud)
我可以在我的架构中使用以下内容:
<xs:simpleType name="HexInt">
<xs:annotation>
<xs:appinfo>
<jaxb:javaType name="int" parseMethod="Integer.decode" />
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="0x[0-9a-fA-F]+" />
</xs:restriction>
</xs:simpleType>
<xs:element name="SpecialValue" type="HexInt" />
Run Code Online (Sandbox Code Playgroud)
当我通过XJC工具运行模式,字符串"×1234"应该使用Integer.decode()作为价值为0x1234或4660十进制整数解码.生成的Adapter类正确反映了这一点:
public Integer unmarshal(String value) {
return (Integer.decode(value));
}
Run Code Online (Sandbox Code Playgroud)
但是,当我想将值封送回XML元素(String字面值)时,Adapter类执行以下操作:
public String marshal(Integer value) {
if (value == null) {
return null;
}
return value.toString();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,整数×1234的字符串值(4660十进制)是"4660",这不符合我的架构(因为它没有"0x"前缀).
如何告诉适配器我希望整数0x1234被编组为"0x1234"字符串文字?我希望能够在模式中执行此操作,以便我可以生成新的Java类而无需修改输出.这可能吗?
编辑:根据接受的答案,这是我做的工作:
我在com.example.Parse类中编写了一个名为toHexString()的方法:
public static String toHexString(int value)
{
return ("0x" + Integer.toHexString(value));
}
Run Code Online (Sandbox Code Playgroud)
然后我将模式指向该方法进行打印:
<xs:simpleType name="HexInt">
<xs:annotation>
<xs:appinfo>
<jaxb:javaType name="int" parseMethod="Integer.decode" printMethod="com.example.Parse.toHexString" />
</xs:appinfo>
</xs:annotation>
<xs:restriction …Run Code Online (Sandbox Code Playgroud) 我最近在阅读关于Arduino的Hello World应用程序的文章,我心里想,"我想知道我是否可以用我现在拥有的硬件做到这一点."
由于我没有Arduino,我抓起了一个我已经铺设的USB闪存驱动器并开始在谷歌上搜索有关它的信息.我在这方面没有找到太多有用的信息,所以我现在在这里问:我是否可以访问USB驱动器的硬件(例如LED)并通过某些编程环境与它进行交互(我当时认为C#应该可能有办法做到这一点)?
此外,与此主题相关 - 有谁知道USB驱动器使用什么样的命令?例如,SCSI存储设备具有标准化的命令集; ATA设备具有类似的协议.如何向USB存储设备发出简单的读/写命令?
有谁知道在Java中向硬盘驱动器发出命令的方法?Java甚至支持这种硬件交互吗?
例如,如果我有一个我想查询的SCSI硬盘驱动器,是否有预先存在的Java方法来执行此操作,或者我是否必须自己编写?
http://en.wikipedia.org/wiki/SCSI有一些关于SCSI命令的一般信息,以防您不熟悉.
假设我想要一个表示内存中数据结构的类.在此结构中,前两个字节表示它的结构版本.后面的数据的顺序和大小取决于结构的版本.
例如:版本1是一个10字节的结构,如下所示:
版本2是一个20字节的结构,如下所示:
我希望我的类能够支持这两个版本,而不必让类的用户指定要使用的版本.也就是说,当构造对象时,它应该能够使用Format Version字段来确定其结构应该是什么.然后,应根据结构适当地创建每个字段的getter/setter.我还希望将来能够添加对其他结构版本的支持.每个新版本的结构很可能包含与旧版本相同的所有字段,但可能每个字段的分配长度更长,也许还有一些新添加的字段.
据我所知,我唯一的限制是格式版本字段始终出现在字节偏移0处,并且总是2个字节长.
那么,有可能实现我的目标吗?