这是一个例子:
public interface IXMLizable<T>
{
static T newInstanceFromXML(Element e);
Element toXMLElement();
}
Run Code Online (Sandbox Code Playgroud)
当然这不会奏效.但为什么不呢?
其中一个可能的问题是,当您致电时会发生什么:
IXMLizable.newInstanceFromXML(e);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我认为它应该只调用一个空方法(即{}).所有子类都将被强制实现静态方法,因此在调用静态方法时它们都会很好.那么为什么这不可能呢?
编辑:我想我正在寻找比"因为这就是Java的方式"更深层次的答案.
是否有一个特殊的技术原因导致静态方法无法被覆盖?也就是说,为什么Java的设计者决定使实例方法可覆盖但不是静态方法?
编辑:我的设计的问题是我正在尝试使用接口来强制执行编码约定.
也就是说,界面的目标是双重的:
我希望IXMLizable接口允许我将实现它的类转换为XML元素(使用多态,工作正常).
如果有人想要创建一个实现IXMLizable接口的类的新实例,他们将始终知道将有一个newInstanceFromXML(Element e)静态构造函数.
除了在界面中添加评论之外,还有其他方法可以确保这一点吗?
编辑: 从Java 8开始,接口中现在允许使用静态方法.
考虑以下两个带括号的片段:
switch (var) {
case FOO: {
x = x + 1;
break;
}
case BAR: {
y = y + 1;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
没有括号:
switch (var) {
case FOO:
x = x + 1;
break;
case BAR:
y = y + 1;
break;
}
Run Code Online (Sandbox Code Playgroud)
我知道,在带括号的代码段中,通过将每个案例括在大括号中来创建一个新的范围.但是,如果每个案例都不需要新范围(即没有重用变量名称),那么在案例中使用大括号是否存在任何性能损失?
Eclipse是一个非常棒的编辑器,我更喜欢使用它,但缺少Eclipse的GUI设计工具.另一方面,NetBeans非常适合GUI设计.
使用NetBeans进行GUI设计和Eclipse是否存在同一项目中的其他所有内容的提示,技巧或陷阱?
编辑:我试过Maven,它似乎不起作用(对我的需求太复杂).
我最近开始学习Scala并且很失望(但并不感到惊讶)他们的泛型也是通过类型擦除来实现的.
我的问题是,Scala是否有可能使用具体的泛型,或者JVM是否需要以某种方式进行更改?如果确实需要更改JVM,究竟需要更改什么?
我的域模型根中有一个类,如下所示:
namespace Domain
{
public class Foo { ... }
}
Run Code Online (Sandbox Code Playgroud)
我还在另一个名称空间中有另一个具有相同名称的类:
namespace Domain.SubDomain
{
public class Foo { ... }
}
Run Code Online (Sandbox Code Playgroud)
对于我的映射,我有一个Mapping目录,其子目录名称SubDomain包含在Domain.SubDomain命名空间中找到的域类的映射.他们都在同一个集会中.
但是,当我尝试使用NHibernate加载它们时,我不断得到DuplicateMappingException...即使两个Foos都有不同的命名空间.我用来加载我的NHibernate配置的代码是这样的:
var cfg = new Configuration()
.Configure()
.AddAssembly("Domain");
Run Code Online (Sandbox Code Playgroud)
我如何告诉NHibernate让我使用两个具有相同名称(但名称空间不同)的实体?
我正在编写C#Wicket实现,以加深我对C#和Wicket的理解.我们遇到的一个问题是Wicket大量使用匿名内部类,而C#没有匿名内部类.
因此,例如,在Wicket中,您可以像这样定义一个链接:
Link link = new Link("id") {
@Override
void onClick() {
setResponsePage(...);
}
};
Run Code Online (Sandbox Code Playgroud)
由于Link是一个抽象类,它强制实现者实现onClick方法.
但是,在C#中,由于没有匿名内部类,因此无法执行此操作.作为替代方案,您可以使用以下事件:
var link = new Link("id");
link.Click += (sender, eventArgs) => setResponsePage(...);
Run Code Online (Sandbox Code Playgroud)
当然,这有一些缺点.首先,可以有多个Click处理程序,这可能不太酷.它也不会强制实现者添加Click处理程序.
另一个选择可能是只有一个这样的闭包属性:
var link = new Link("id");
link.Click = () => setResponsePage(...);
Run Code Online (Sandbox Code Playgroud)
这解决了具有许多处理程序的问题,但仍然没有强制实现者添加处理程序.
所以,我的问题是,你如何在惯用的C#中模仿这样的东西?
我正在写一些使用promises的JS代码.例如,我打开一个表单弹出窗口,然后返回一个jQuery Deferred对象.它的工作原理如下:
如果用户在表单上单击"确定"并进行验证,则"延迟"将解析为表示表单数据的对象.
如果用户单击"取消",则"延迟"将解析为空.
我想要决定的是Deferred应该拒绝而不是解决?更一般地说,我想知道何时应该解决类似空对象的问题,何时应该拒绝?
这里有一些代码展示了两个位置:
// Resolve with null.
var promise = form.open()
.done(function (result) {
if (result) {
// Do something with result.
} else {
// Log lack of result.
}
});
// Reject.
var promise = form.open()
.done(function (result) {
// Do something with result.
})
.fail(function () {
// Log lack of result.
});
Run Code Online (Sandbox Code Playgroud) 我正试图抓住我管理的Facebook粉丝页面粉丝的名字.我已经做了一些窥探,显然,FB API不支持,但Facebook实际上使用AJAX/JSON来填充列表.无论如何,任何人都可以建议一种方法来自己进行调用并将数据作为纯文本获取吗?
另外,我发现一个人用Ruby编写的黑客,但我完全不熟悉这种语言.
我在这里先向您的帮助表示感谢!
为什么RegExp /^\w+$/匹配undefined?
示例代码:
alert(/^\w+$/.test(undefined));
Run Code Online (Sandbox Code Playgroud)
这将在Firefox 3中显示为true(仅我在其上测试过的浏览器).