小编dow*_*ner的帖子

Java:在超类方法签名中返回子类

我正在研究一个问题,其中有几个实现Foo,伴随着几个FooBuilder.虽然它们Foo共享几个需要设置的常见变量,但它们也有不同的变量,需要各自FooBuilder实现某些特定功能.为了简洁起见,我想让安装FooBuilder人员使用方法链,比如:

public abstract class FooBuilder {
  ...

  public FooBuilder setA(int A) {
    this.A = A;
    return this;
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

public class FooImplBuilder extends FooBuilder{
  ...
  public FooImplBuilder setB(int B) {
    this.B = B;
    return this;
  }
  public FooImplBuilder setC(int C) {
    this.C = C;
    return this;
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

等等,有几种不同的FooBuilder实现方式.这在技术上完成了我想要的一切,但是,这种方法对执行方法链接时方法调用的顺序很敏感.以下是方法未定义的编译错误:

someFoo.setA(a).setB(b)...
Run Code Online (Sandbox Code Playgroud)

要求开发人员考虑链中方法调用的顺序.为了避免这种情况,我想让setter以FooBuilder某种方式返回实际的实现子类.但是,我不知道该怎么做.什么是最好的方法?

java interface subclass superclass

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

Hadoop Pig:传递命令行参数

有没有办法做到这一点?例如,传递要处理的文件的名称等?

hadoop apache-pig

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

Java Generics:将通用函数对象链接在一起

我一直在努力解决以下问题.我有一系列函数对象,每个函数对象都有自己的输入和输出类型,通过java中的泛型类型参数定义.我想在链中安排这些,以便将原始数据输入到第一个函数,转换为输出类型,这是下一个对象的输入类型,依此类推.当然这对于硬编码来说是微不足道的,但是我想让代码可以插入到新的函数对象中.如果我只是省略类型参数(只有最终的输出类型),这就是事情的样子:

    public T process() {
        Iterator<Context> it = source.provideData();
        for(Pipe pipe : pipeline) {
            it = pipe.processIterator(it);
        }
        return sink.next(it);
    }
Run Code Online (Sandbox Code Playgroud)

这里,数据上的迭代器在函数对象之间传递,上下文应该是Context.有没有办法保持以下类型的管道可插拔,仍然保持类型安全?

编辑:为了清楚起见,我有一系列功能对象,管道.每个都将特定类型作为输入,并输出另一种类型.(实际上是这些类型的迭代器)这些将被链接在一起,例如Pipe<A,B> -> Pipe<B,C> -> Pipe<C,D> -> ...,以便一个管道的输出是下一个管道的输入类型.这里还有一个源,它输出一个类型为A的迭代器,以及一个接受类型的接收器(过去管道的输出).这会让事情更清楚吗?问题是,因为输入和输出类型的兼容性存在严重依赖性,有没有办法确保这一点?

我开始认为将函数对象插入管道可能是确保类型安全的最佳时间,但我不知道如何做到这一点.

编辑2:我有一个函数对象的加法器方法,如下所示:

public void addPipe(Pipe<?,?> pipe) {
    pipeline.add(pipe);
}
Run Code Online (Sandbox Code Playgroud)

我想检查第一个类型参数是否与当前管道的"结束"相同,如果没有则抛出异常?我不认为这里有一个很好的方法来获得编译时安全性.然后可以将当前管道的"结束"设置为输入管道的第二个类型参数.我想不出如何用泛型来做这件事,并且传递类信息似乎很可怕.

java generics chain-of-responsibility

6
推荐指数
1
解决办法
2771
查看次数

在tomcat6 java应用程序中放置log4j.properties文件的位置?

我正在尝试为RESTful/jax-rs java应用程序配置日志记录.该应用程序正常运行,但我无法配置日志记录.我的代码中有:

private static Logger logger = Logger.getLogger(Foo.class); static { PropertyConfigurator.configure("log4j.properties"); }

我把通常的log4j.properties放在WebContent/WEB-INF /中,但是当我用这个应用程序启动tomcat时,我进入了catalina.out:

log4j:ERROR Could not read configuration file [log4j.properties]. java.io.FileNotFoundException: log4j.properties (No such file or directory)

我还可以把文件放在哪里?对不起,如果这是一个n00b问题,但这已经让我感到困惑了一段时间.

java tomcat log4j

4
推荐指数
1
解决办法
2690
查看次数

使用 setuptools 时从 url 安装 whl

在我的 setup.py 中,我在参数中指定了许多库required_libraries。这些通常采用以下形式:oauthlib==2.0.6。现在我还想使用远程 url 上托管的 Wheel 安装一个库:http://ci.tensorflow.org/view/Nightly/job/nightly-pi-zero/lastSuccessfulBuild/artifact/output-artifacts/tensorflow-1.4.0-cp27-none-any.whl。简单地将其添加为结果列表中的条目required_libraries会导致错误:

'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Invalid requirement,....

setuptools 的文档没有太大帮助。有人有进行此类安装的经验吗?我想这将是一个常见问题,但我可能在谷歌上搜索了错误的词

python setuptools python-wheel

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