根据这个答案和答案,Java静态方法不是虚拟的,不能被覆盖.因此,直观地说,这应该有效(即使在99%的情况下,这是危险的编程):
class Foo
{
public static String frob() {
return "Foo";
}
}
class Bar extends Foo
{
public static Number frob() {
return 123;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在实践中,这会让你:
Foo.java:10: frob() in Bar cannot override frob() in Foo; attempting to use incompatible return type
found : java.lang.Number
required: java.lang.String
public static Number frob() {
^
Run Code Online (Sandbox Code Playgroud)
天真地,似乎Foo.frob()
并且Bar.frob()
应该与彼此无关; 然而Java坚持认为他们这样做.为什么?
(Nb:我不想听到为什么以这种方式编码是个坏主意,我想听听Java和/或JVM设计中的内容,这使得这个限制成为必要.)
更新以添加:对于那些认为编译器会因为在实例上调用静态方法而感到困惑的人,如果你允许这样做:它不会.它已经在方法签名的情况下算出这个是兼容的:
class Foo
{
static String frob() {
return "Foo";
}
} …
Run Code Online (Sandbox Code Playgroud) 给定一组类,找到最近的公共超类的最佳方法是什么?
例如,给出以下内容:
interface A {}
interface B {}
interface AB extends A, B {}
interface C {}
class AImpl implements A {}
class ABImpl implements AB {}
class ABImpl2 implements A, B {}
class BCImpl implements B, C {}
Run Code Online (Sandbox Code Playgroud)
我希望以下(不详尽):
commonSuperclass(A, AImpl) == A
commonSuperclass(A, B, C) == Object or null, I'm not picky
commonSuperclass(A, AB) == A
commonSuperclass(AImpl, ABImpl) == A
commonSuperclass(ABImpl, ABImpl2) == either A or B or both, I'm not picky
commonSuperclass(AImpl, ABImpl, ABImpl2) == A
commonSuperclass(ABImpl, …
Run Code Online (Sandbox Code Playgroud) 我正在使用ffmpeg获取有关视频文件的信息,我不想将信息保存到文件中.ffmpeg返回所有视频信息,但它作为错误返回,因为我没有指定输出文件.我正在使用的命令是:
ffmpeg -i C:\Test\3FA8D0E6-BD61-D160-98BB41304D63FAE3.mp4
Run Code Online (Sandbox Code Playgroud)
我得到的错误是"必须至少指定一个输出文件"
我在ColdFusion中调用它<cfexecute>
,并且输出存储在局部变量中,这就是为什么我不想指定文件...我只是不需要将它存储在文件中.
如果它有任何区别,我在Windows上运行它.
是否可以在ruby中的模块中声明静态方法?
module Software
def self.exit
puts "exited"
end
end
class Windows
include Software
def self.start
puts "started"
self.exit
end
end
Windows.start
Run Code Online (Sandbox Code Playgroud)
上面的例子不会打印出"退出".
是否只能在模块中使用实例方法?
在Xamarin/MonoTouch中是否有办法检测是否在主线程中调用了代码?
我正在寻找类似于Java的东西EventQueue.isEventDispatchThread()
- 我在Swing编程中发现它assert
不时(或有时候assert
不是这样)很方便 - 确保模型不断更新并从EDT中读取,长时间运行的调用不会阻止UI.
我想在我的MonoTouch应用程序中做同样的事情,以确保不会从UI调用或包含各种代码InvokeOnMainThread
.
更新:对于后来出现的人:来自JP的Obj-C回答如下.Xamarin/MonoTouch相当于NSThread.Current.IsMainThread
.
我目前正在阅读Joshua Bloch的Effective Java,我喜欢它!但在第112页(第24项)布洛赫写道:
静态成员类是最简单的嵌套类.最好将其视为普通类,恰好在另一个类中声明,并且可以访问所有封闭类的成员,甚至是那些声明为private的成员.
这真让我困惑.我宁愿说:
静态成员类是最简单的嵌套类.它最好被认为是一个普通的类,碰巧在另一个类中声明,并且可以访问所有封闭类的静态成员,甚至是那些声明为private的成员.
这是一个片段,说明了我对引用的理解:
public class OuterClass {
public void printMessage(String message) {
System.out.println(message);
}
private static class InnerClass {
public void sayHello() {
printMessage("Hello world!"); //error: Cannot make a static reference to the non-static method printMessage(String)
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以看到InnerClass的sayHello方法无法访问OuterClass的printMessage方法,因为它是在静态内部类中声明的,而printMessage方法是一个实例方法.看起来作者似乎建议静态成员类可以访问封闭类的非静态字段.我确信我在他的最后一句话中误解了一些内容,但我无法弄清楚是什么.任何帮助将不胜感激!
编辑:我改变了两种方法的可见性,因为它与我的问题无关.我对静态成员感兴趣,而不是私人成员.
是否有一个简单的钩子来检测脚本打开的窗口是否已完成加载?基本上,我想要相当于onLoad()
钩子,但我不能直接设置它 - 假设子文档是给定的,我实际上不能在其中放置我自己的任何代码.
例如,假设我有以下两个文件:
parent.html
:
<html>
<head>
<title>Parent</title>
</head>
<script type="text/javascript">
var w;
function loadChild() {
w = window.open();
w.location.href="child.html";
// block until child has finished loading... how?
w.doSomething();
}
</script>
</html>
<body>
I am a parent window. <a href="javascript:loadChild()">Click me</a>.
</body>
Run Code Online (Sandbox Code Playgroud)
child.html
:
<html>
<head>
<title>Child</title>
</head>
<script type="text/javascript">
function doSomething() {
alert("Hi there");
}
</script>
</html>
<body>
I am a child window
</body>
Run Code Online (Sandbox Code Playgroud)
由于设置location.href是非阻塞的,w.doSomething()
因此尚未定义,并且doSomething()
调用会爆炸.如何检测孩子已完成装载?
这是github上的一个示例项目:http://github.com/ripper234/Test-grails-project
我想捕获最新版本,并将链接发送给某人,这样即使项目稍后更改,他也会看到我正在讨论的具体修订版.我想分叉可以做到这一点,但这太过分了.
我怎么做?
我在Ruby中编写了一个简单的霍夫曼编码.作为输出,我有一个数组,例如:
["010", "1111", "10", "10", "110", "1110", "001", "110", "000", "10", "011"]
Run Code Online (Sandbox Code Playgroud)
我需要在文件中写入,然后读取它.我尝试了几种方法:
IO.binwrite("out.cake", array)
Run Code Online (Sandbox Code Playgroud)
我得到一个简单的文本文件,而不是二进制.
要么:
File.open("out.cake", 'wb' ) do |output|
array.each do | byte |
output.print byte.chr
end
end
Run Code Online (Sandbox Code Playgroud)
看起来它有效,但后来我无法将其读入阵列.
我应该使用哪种编码?
我的代码中有几种情况,各种线程可以创建工作项,由于各种原因,不应该并行完成.我想确保工作以FIFO方式完成,无论它来自哪个线程.在Java中,我将工作项放在单线程上ExecutorService
; 在C#中是否有等价物?我用Queue
一堆和一些lock(){}
块拼凑了一些东西,但是能够使用现成的和经过测试的东西会很好.
更新:有没有人有System.Threading.Tasks的经验?它有这种解决方案吗?我正在写一个MonoTouch的应用程序,所以谁知道,如果我甚至可以找到它的反向移植版本,我能得到工作,但它会至少是值得思考的未来.
更新#2对于C#开发人员不熟悉我说的Java库,基本上我想要的东西,可以让不同的线程交班工作项目等,所有这些工作项目将在单个线程中运行(这不是任何的调用线程).
更新,6/201:如果我现在正在构建一个类似的系统,我可能会根据Matt Craig的回答使用Reactive Extensions.我要离开扎卡里·耶茨的回答公认的一个,不过,因为如果你在思考的Rx你可能甚至不会问这个问题,我认为是比较容易bodge到预先的Rx程序.ConcurrentQueue
java ×3
ruby ×2
static ×2
.net ×1
bindata ×1
c# ×1
class ×1
concurrency ×1
ffmpeg ×1
git ×1
github ×1
inheritance ×1
io ×1
ios ×1
javascript ×1
member ×1
overriding ×1
xamarin.ios ×1