我有几个复杂的数据结构,如
Map< A, Set< B > >
Set< Map< A, B > >
Set< Map< A, Set< B > > >
Map< A, Map< B, Set< C > > >
and so on (more complex data structures)
Run Code Online (Sandbox Code Playgroud)
注意:在我的情况下,如果我使用Set或List并不重要.
现在我知道JAXB允许我定义XmlAdapter,这没关系,但我不想为每个给定的数据结构定义一个XmlAdapter(它只是太多的复制和粘贴代码).
我试图通过声明两个泛化XmlAdapter来实现我的目标:
MapAdapter<K,V>SetAdapter<V>问题:
JAXB抱怨如下:
javax.xml.bind.JAXBException:
class java.util.Collections$UnmodifiableMap nor any of its
super class is known to this context.
Run Code Online (Sandbox Code Playgroud)
这是我的适配器类:
import java.util.*;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.*;
public class Adapters {
public final static class MapAdapter<K, V> …Run Code Online (Sandbox Code Playgroud) 在普通Java中,可以在运行时以编程方式覆盖类的方法(甚至创建新方法)?
即使我在编译时不知道类,我也希望能够这样做.
我在运行时重写的意思是:
abstract class MyClass{
public void myMethod();
}
class Overrider extends MyClass{
@Override
public void myMethod(){}
}
class Injector{
public static void myMethod(){ // STATIC !!!
// do actual stuff
}
}
// some magic code goes here
Overrider altered = doMagic(
MyClass.class, Overrider.class, Injector.class);
Run Code Online (Sandbox Code Playgroud)
现在,这个调用......
altered.myMethod();
Run Code Online (Sandbox Code Playgroud)
...将调用Injector.myMethod()而不是Overrider.myMethod().
Injector.myMethod()是静态的,因为在执行"magic"之后,它会从不同的类实例(它是Overrider)调用,(因此我们阻止它访问本地字段).
我在网上搜索了可拖动的Swing组件的例子,但我发现了不完整或不工作的例子.
我需要的是一个Swing组件,可以通过鼠标在其他组件内拖动.在被拖动时,它应该已经改变了它的位置,而不仅仅是"跳"到目的地.
我希望能够在没有非标准API的情况下工作的示例.
谢谢.
我有两个不同大小的显示器,使用(我相信)TwinView连接在一起.
我试过了
System.out.println(Toolkit.getDefaultToolkit().getScreenSize());
Run Code Online (Sandbox Code Playgroud)
得到
java.awt.Dimension[width=2960,height=1050]
Run Code Online (Sandbox Code Playgroud)
如果你将两个显示器统计在一起,这是真的.
取而代之的是,我希望能够实现以下目标之一:
似乎有两种不同的JSR用于注释.
JSR-305:软件缺陷检测的注释 (附加资源)
JSR-308:Java类型的注释 (附加资源)
两者似乎都面向静态代码分析.
你知道吗:
我正在处理一个已经创建的 Document对象.我必须能够将它的基本命名空间(属性名称"xmlns")设置为特定值.我的输入是DOM,类似于:
<root>...some content...</root>
Run Code Online (Sandbox Code Playgroud)
我需要的是DOM,它类似于:
<root xmlns="myNamespace">...some content...</root>
Run Code Online (Sandbox Code Playgroud)
而已.容易,不是吗?错误!没有DOM!
我得到一个空xmlns的文档(它适用于任何其他属性名称!)
<root xmlns="">...</root>
Run Code Online (Sandbox Code Playgroud)
首先克隆文档:
Document input = /*that external Document whose namespace I want to alter*/;
DocumentBuilderFactory BUILDER_FACTORY_NS = DocumentBuilderFactory.newInstance();
BUILDER_FACTORY_NS.setNamespaceAware(true);
Document output = BUILDER_NS.newDocument();
output.appendChild(output.importNode(input.getDocumentElement(), true));
Run Code Online (Sandbox Code Playgroud)
我真的很想念document.clone(),但也许只是我.
现在重命名根节点:
output.renameNode(output.getDocumentElement(),"myNamespace",
output.getDocumentElement().getTagName());
Run Code Online (Sandbox Code Playgroud)
现在不是那么简单吗?;)
我现在得到的是:
<root xmlns="myNamespace">
<someElement xmlns=""/>
<someOtherElement xmlns=""/>
</root>
Run Code Online (Sandbox Code Playgroud)
那么(正如我们所有人所期望的那样,对吧?),这只重命名根节点的命名空间.
诅咒你,DOM!
有没有办法以递归方式执行此操作(无需编写自己的递归方法)?
请不要建议我做一些花哨的解决方法,例如将DOM转换为其他内容,在那里更改命名空间,然后将其转换回来.我需要DOM,因为它是操作XML的最快标准方法.
注意:我正在使用最新的JDK.
编辑
从问题中删除了错误的假设,这与假名前缀有关.
我正在编写一个服务器程序,用于运行API的单元测试 (显示大量信息并提供Web访问来控制/监控整个事物)...
该API 在编译期间为服务器所知,并作为JAR提供.
为了能够比较不同版本 API的单元测试结果(无需重新启动服务器),我希望能够卸载API的"当前"版本,并重新加载较新版本(或较旧的版本) .
我不想使用URLClassLoader并按名称
(使用 getDeclaredMethod("someMethod"))调用每个方法,
因为服务器在很大程度上依赖于API,并且以这种脏的方式"包装"每个方法调用会很复杂.
我在想:由于JAR 的所有版本的所有接口都是相同的,我不能通过某种方式重新加载其他版本的JAR(没有那个by-name-invokation?).
注意:我使用的是最新的Java SE(6)和Java EE(5).
如果您认为,我想要达到的目标是不可能的,请提出"解决方法"或不同的概念.
假设我正在使用一些图形API,它允许我通过指定4个必要点来绘制贝塞尔曲线: 开始,结束,两个控制点.
我可以重复使用此功能来绘制"原始"曲线的x%(通过调整控制点和终点)吗?
还是不可能?
不必要的信息,如果有人关心:
我正在使用Java的Path2D绘制贝塞尔曲线:
Path2D p = new GeneralPath();
p.moveTo(x1, y1);
p.curveTo(bx1, by1, bx2, by2, x2, y2);
g2.draw(p);
Run Code Online (Sandbox Code Playgroud)W3的EXI(高效XML交换)将标准化.它声称是"最后的二进制标准".
它是存储针对处理和存储而优化的XML数据的标准,与XML模式捆绑在一起(使数据具有强类型和强结构).嗯,有很多声称的优点.处理和内存效率测量给我留下了深刻的印象.
我问自己,所有已建立的XML API会发生什么?
这段与我的问题有关:
4.2现有的XML处理API
由于EXI是XML Infoset的编码,EXI实现可以支持任何常用的XML API进行XML处理,因此EXI对现有的XML API没有直接影响.但是,使用现有的XML API还要求将EXI文档中出现的所有名称和文本转换为字符串.将来,如果较高层可以直接将这些数据用作EXI文档中出现的类型值,则可以实现更高的效率.例如,如果较高层需要类型化数据,则通过其字符串形式会产生性能损失,因此直接支持类型化数据的扩展API可以在与EXI一起使用时提高性能.
我理解如下:"将EXI与现有API一起使用?没有性能提升!(除非你全部重写)"
我们以Java生态系统为例:
我们有大量的XML API的最新的JDK 6(每个主要JDK版本中,越来越多的人加入.)据我判断,大部分(如果不是全部),他们使用的是内存中的DOM树,或序列化("文本")表示来转换/处理/验证/ ... XML数据.
你们怎么想?这些API会在引入EXI后发生什么?
谢谢大家的意见.
对于那些不了解EXI的人:http://www.w3.org/XML/EXI/
编写JSP文件时,如何在运行时获取此文件的当前目录
(以便能够迭代目录并列出其内容)?
由于某些安全问题,是否会限制某些文件I/O操作?
我更喜欢没有访问某些特定于实现的服务器变量/属性的解决方案.
编辑:
我不会问它是否如此简单new File("."),因为这只会给出服务器可执行文件的目录.