小编Dav*_*les的帖子

为什么Java为重写的静态方法强制执行返回类型兼容性?

根据这个答案答案,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)

java static overriding

30
推荐指数
1
解决办法
3403
查看次数

查找类集合的最近公共超类(或超级接口)

给定一组类,找到最近的公共超类的最佳方法是什么?

例如,给出以下内容:

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)

java inheritance

27
推荐指数
2
解决办法
3702
查看次数

使用ffmpeg获取视频信息 - 为什么我需要指定输出文件?

我正在使用ffmpeg获取有关视频文件的信息,我不想将信息保存到文件中.ffmpeg返回所有视频信息,但它作为错误返回,因为我没有指定输出文件.我正在使用的命令是:

 ffmpeg -i C:\Test\3FA8D0E6-BD61-D160-98BB41304D63FAE3.mp4
Run Code Online (Sandbox Code Playgroud)

我得到的错误是"必须至少指定一个输出文件"

我在ColdFusion中调用它<cfexecute>,并且输出存储在局部变量中,这就是为什么我不想指定文件...我只是不需要将它存储在文件中.

如果它有任何区别,我在Windows上运行它.

ffmpeg

23
推荐指数
4
解决办法
2万
查看次数

如何从包含模块的类中调用Ruby模块中的静态方法?

是否可以在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)

上面的例子不会打印出"退出".

是否只能在模块中使用实例方法?

ruby

22
推荐指数
2
解决办法
2万
查看次数

检测您何时进入/离开Xamarin.iOS中的主线程

在Xamarin/MonoTouch中是否有办法检测是否在主线程中调用了代码?

我正在寻找类似于Java的东西EventQueue.isEventDispatchThread()- 我在Swing编程中发现它assert不时(或有时候assert不是这样)很方便 - 确保模型不断更新并从EDT中读取,长时间运行的调用不会阻止UI.

我想在我的MonoTouch应用程序中做同样的事情,以确保不会从UI调用或包含各种代码InvokeOnMainThread.


更新:对于后来出现的人:来自JP的Obj-C回答如下.Xamarin/MonoTouch相当于NSThread.Current.IsMainThread.

multithreading xamarin.ios ios

22
推荐指数
1
解决办法
6448
查看次数

为什么这个静态内部类不能在其外部类上调用非静态方法?

我目前正在阅读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方法是一个实例方法.看起来作者似乎建议静态成员类可以访问封闭类的非静态字段.我确信我在他的最后一句话中误解了一些内容,但我无法弄清楚是什么.任何帮助将不胜感激!

编辑:我改变了两种方法的可见性,因为它与我的问题无关.我对静态成员感兴趣,而不是私人成员.

java static class member

22
推荐指数
3
解决办法
2897
查看次数

等待子窗口加载完成

是否有一个简单的钩子来检测脚本打开的窗口是否已完成加载?基本上,我想要相当于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()调用会爆炸.如何检测孩子已完成装载?

javascript

20
推荐指数
3
解决办法
5万
查看次数

链接到GitHub上的特定(当前)修订版

这是github上的一个示例项目:http://github.com/ripper234/Test-grails-project

我想捕获最新版本,并将链接发送给某人,这样即使项目稍后更改,他也会看到我正在讨论的具体修订版.我想分叉可以做到这一点,但这太过分了.

我怎么做?

git github

19
推荐指数
4
解决办法
2万
查看次数

在Ruby中将基数为2的数字字符串数组写入二进制文件

我在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)

看起来它有效,但后来我无法将其读入阵列.

我应该使用哪种编码?

ruby io bindata

19
推荐指数
1
解决办法
3万
查看次数

Java ExecutorService.newSingleThreadExecutor()的C#等价物,或者:如何序列化对资源的多线程访问

我的代码中有几种情况,各种线程可以创建工作项,由于各种原因,不应该并行完成.我想确保工作以FIFO方式完成,无论它来自哪个线程.在Java中,我将工作项放在单线程上ExecutorService; 在C#中是否有等价物?我用Queue一堆和一些lock(){}块拼凑了一些东西,但是能够使用现成的和经过测试的东西会很好.

更新:有没有人有System.Threading.Tasks的经验?它有这种解决方案吗?我正在写一个MonoTouch的应用程序,所以谁知道,如果我甚至可以找到它的反向移植版本,我能得到工作,但它会至少是值得思考的未来.

更新#2对于C#开发人员不熟悉我说的Java库,基本上我想要的东西,可以让不同的线程交班工作项目等,所有这些工作项目将在单个线程中运行(这不是任何的调用线程).


更新,6/201:如果我现在正在构建一个类似的系统,我可能会根据Matt Craig的回答使用Reactive Extensions.我要离开扎卡里·耶茨的回答公认的一个,不过,因为如果你在思考的Rx你可能甚至不会问这个问题,我认为是比较容易bodge到预先的Rx程序.ConcurrentQueue

.net c# concurrency multithreading

18
推荐指数
1
解决办法
1万
查看次数