【问题标题】:Java/Jython Hypothesis: constructor should be publicJava/Jython 假设:构造函数应该是公共的
【发布时间】:2016-07-29 05:53:52
【问题描述】:

我不是Java程序员,但我对C++、Scala和Python中的OOP有很好的了解,所以我会理解抽象的解释。

我正在使用一些类似这样的 java 代码:

public class my_class implements ObjectReader<double[][]>, ObjectWriter<double[][]> {
    private static final my_class instance = new my_class();
    private my_class() {};
    public static my_class getInstance(){
        return instance
    }
    public double[][] functionName{String argument) {
        // this is the function I want to use, but it is giving me some errors.
    }
... MORE CODE AND BRACKETS AND SYNTACTICALLY CORRECT STUFF ...

ObjectReader 和 ObjectWriter 在这个库中定义为:

public interface ObjectReader<T>{
    T functionName(String argument);
}

然后在 jython 2.7 中我想使用这个代码(PROPER IMPORTS DONE AND WHATHAVEYOU)

my_class_instance  = path.to.package.my_class()
data_i_want = my_class_instance.functionName("A String")

然后出现错误

TypeError: No visible constructors for class path.to.package.my_class)

a) 我认为在 java 中如果你在类体中指定一个构造函数,它就是一个被覆盖的构造函数。 'principal' 构造函数的形式如下:

public class my_class(type1 arg1, type2 arg 2, ...){
...
}

my_class 是否需要构造函数的参数?

b) 我尝试从 jython 代码中删除括号,如下所示:

my_class_instance  = path.to.package.my_class // No more () here!
data_i_want = my_class_instance = my_class_instance.functionName("A String")    

并得到错误:

TypeError: functionName() expected 2 args; got 1

我在网上看到很多关于这两个问题的帖子,但如果有人知道这个谜题的答案,那将是一个很好的节省时间的方法。现在是凌晨 2 点,我想睡觉!

【问题讨论】:

    标签: java jython jython-2.7


    【解决方案1】:

    这会产生错误,因为没有可见的 my_class 构造函数:

    my_class_instance = path.to.package.my_class()
    

    这不起作用,因为它为您提供了对类的引用,而不是实例:

    my_class_instance = path.to.package.my_class
    

    但是您有一个名为getInstance() 的工厂方法。所以用它来获取一个实例:

    my_class_instance = path.to.package.my_class.getInstance()
    

    【讨论】:

    • 或者公开构造函数。然后你可以使用my_class_instance = path.to.package.my_class()
    • 谢谢,现在可以了!我发现这个stackoverflow.com/questions/3169372/… 解释了为什么我们可以编写 getInstance 而不是公开构造函数。
    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2011-03-01
    • 2017-03-29
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多