小编Chr*_*way的帖子

通过JNI接口共享输出流

我正在编写一个通过JNI接口使用C++库的Java应用程序.C++库创建了类型的对象Foo,这些对象通过JNI传递给Java.

假设库具有输出功能

void Foo::print(std::ostream &os)
Run Code Online (Sandbox Code Playgroud)

我有一个Java OutputStream out.如何Foo::print从Java 调用以便输出显示out?有什么办法来要挟OutputStreamstd::ostream在JNI层?我可以在缓冲区中捕获JNI层的输出,然后将其复制到out

c++ java java-native-interface iostream outputstream

13
推荐指数
2
解决办法
4581
查看次数

在Guice注入一家通用工厂

以下代码是生成Bar<T>给定a 的工厂示例Foo<T>.工厂并不关心什么T是:对于任何类型T,它都可以制造Bar<T>一个Foo<T>.

import com.google.inject.*;
import com.google.inject.assistedinject.*;

class Foo<T> {
  public void flip(T x) { System.out.println("flip: " + x); }
}

interface Bar<T> {
  void flipflop(T x);
}

class BarImpl<T> implements Bar<T> {
  Foo<T> foo;

  @Inject
  BarImpl(Foo<T> foo) { this.foo = foo; }

  public void flipflop(T x) { foo.flip(x); System.out.println("flop: " + x); }
}

interface BarFactory {
  <T> Bar<T> create(Foo<T> f);
}

class Module extends AbstractModule {
  public …
Run Code Online (Sandbox Code Playgroud)

java generics dependency-injection guice

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

Eclipse:通过本地属性将source/javadoc附加到库

我的SVN存储库中有第三方库,我想在Eclipse中本地关联source/javadoc.即,应该有一些本地设置(例如,local.properties文件中的条目)将源/ javadoc与JAR文件相关联,但是不会通过本地依赖项将本地依赖项引入存储库.classpath.理想情况下,我有

lib_src_dir = /my/path/to/lib/src
Run Code Online (Sandbox Code Playgroud)

local.properties

<classpathentry kind="lib" path="lib.jar" sourcepath="${lib_src_dir}">
Run Code Online (Sandbox Code Playgroud)

.classpath.可以这样做吗?

[编辑] @VonC的回答是有帮助的......有没有办法从文本文件加载路径变量(例如local.properties),而不是通过Window - > Preferences - > General - > Workspace - > Linked Resources?

java eclipse javadoc jar

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

Java:使用RuntimeException从访问者中逃脱

我很有诱惑力使用未经检查的异常作为Java程序中的短路控制流构造.我希望有人能以更好,更清洁的方式告诉我这个问题.

我的想法是,我希望减少访问者对子树的递归探索,而不必在每个方法调用中检查"停止"标志.具体来说,我正在使用抽象语法树上的访问者构建控制流图.returnAST中的语句应该停止对子树的探索,并将访问者发送回最近的封闭if/then或循环块.

Visitor超类(从XTC库)定义

Object dispatch(Node n)
Run Code Online (Sandbox Code Playgroud)

通过表单的反射方法回调

Object visitNodeSubtype(Node n)
Run Code Online (Sandbox Code Playgroud)

dispatch 没有声明抛出任何异常,所以我声明了一个扩展的私有类 RuntimeException

private static class ReturnException extends RuntimeException {
}
Run Code Online (Sandbox Code Playgroud)

现在,return语句的visitor方法看起来像

Object visitReturnStatement(Node n) {
    // handle return value assignment...
    // add flow edge to exit node...
    throw new ReturnException();
}
Run Code Online (Sandbox Code Playgroud)

并且每个复合语句都需要处理 ReturnException

Object visitIfElseStatement(Node n) {
  Node test = n.getChild(0);
  Node ifPart = n.getChild(1);
  Node elsePart = n.getChild(2);

  // add flow edges to if/else... 

  try{ dispatch(ifPart); } catch( ReturnException e ) { …
Run Code Online (Sandbox Code Playgroud)

java callcc exception visitor

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

是否可以在`flip`中使用一元函数而不是二元函数?

Prelude功能的类型flip是:

flip :: (a -> b -> c) -> b -> a -> c
Run Code Online (Sandbox Code Playgroud)

即,它需要一个二进制函数和两个参数.

Prelude功能的类型id是:

id :: a -> a
Run Code Online (Sandbox Code Playgroud)

但是类型flip id是:

flip id :: a -> (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)

这怎么可能应用flipid的时候id是一个一元函数,并flip要求对第一个参数二元函数?

顺便说一句.flip id类似于\ x f -> f x

haskell functional-programming flip

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

Emacs查询替换文本转换

我想在文件中找到与t [A-Z]u形式的正则表达式匹配的任何文本(即匹配t后跟大写字母和另一个匹配u,并转换匹配的文本以使大写字母为小写.例如,为正则表达式x[A-Z]y

xAy
Run Code Online (Sandbox Code Playgroud)

xay
Run Code Online (Sandbox Code Playgroud)

xZy
Run Code Online (Sandbox Code Playgroud)

xzy
Run Code Online (Sandbox Code Playgroud)

Emacs的query-replace功能允许反向引用,但AFAIK不是匹配文本的转换.是否有内置功能可以做到这一点?有没有人有我可以使用的简短Elisp功能?

UPDATE

@Marcel Levy有它:\,在替换表达式中引入了(任意?)Elisp表达式.例如,上面的解决方案是

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
Run Code Online (Sandbox Code Playgroud)

regex emacs

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

用于"管道"的Java习语

是否有一个更简洁/标准的习惯用法(例如,JDK方法)用于"管道"输入到Java中的输出而不是以下?

public void pipe(Reader in, Writer out) {
    CharBuffer buf = CharBuffer.allocate(DEFAULT_BUFFER_SIZE);
    while (in.read(buf) >= 0 ) {
        out.append(buf.flip());
        buf.clear();
    }
}
Run Code Online (Sandbox Code Playgroud)

[编辑]请注意,ReaderWriter给予.正确答案将演示如何获取inout形成管道(最好不超过1或2个方法调用).我将接受答案,其中inoutInputStreamOutputStream(最好是从/到Reader/ 的转换Writer).我不会接受的答案无论是地方in还是out是一个子类Reader/ InputStreamWriter/ OutputStrem.

java io pipe

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

在Java中隐藏"本地"类型参数

假设我使用的是具有泛型类型参数的接口

interface Foo<T> {
  T getOne();
  void useOne(T t);
}
Run Code Online (Sandbox Code Playgroud)

意图是类型T是抽象的:它对实现强制执行类型约束Foo,但客户端代码并不关心究竟是什么T.

这在通用方法的上下文中没有问题:

public <T> void doStuff(Foo<T> foo) {
  T t = foo.getOne();
  /* do stuff */
  foo.useOne(t);
}
Run Code Online (Sandbox Code Playgroud)

但是假设我想要分解工作doStuff,在课堂上保存一些状态Bar.在这种情况下,我似乎需要添加的类型参数FooBar.

public class Bar<T> {
  private Foo<T> foo;
  private T t;

  /* ... */

  public void startStuff() {
    t = foo.getOne();
  }

  public void finishStuff() {
    foo.useOne(t);
  }
}
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,因为类型参数T没有出现在公共接口中Bar(即,它不包含在任何方法参数或返回类型中).有没有办法"量化T"?即,我可以安排将参数T隐藏在界面中 …

java generics adts

9
推荐指数
2
解决办法
9447
查看次数

适用于Java的最佳漂亮打印库?

什么是Java最好的漂亮打印库?我的意思是一个用于打印带缩进,中断提示等格式化输出的库,而不是用于美化/重新格式化Java代码本身的库.理想情况下,图书馆会System.out.println与朋友"玩得很开心" .

有关我正在寻找的内容的概念,请参阅OCaml的Format模块,尤其是Format.fprintf.

[更新]我不是在寻找控制台窗口库.漂亮的打印库允许您定义格式化任意值的方法,以便保留缩进并在合理的位置选择换行符.这些库存在于Haskell,Standard ML,OCaml,F#Scheme中.该XTC库提供了一些此功能的xtc.tree.Printer,但它并不像在其他语言库一样灵活.

java io pretty-print

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

为什么Bourne shell printf迭代%s参数?

这里发生了什么?

printf.sh:

#! /bin/sh
NAME="George W. Bush"
printf "Hello, %s\n" $NAME
Run Code Online (Sandbox Code Playgroud)

命令行会话:

$ ./printf.sh
Hello, George
Hello, W.
Hello, Bush
Run Code Online (Sandbox Code Playgroud)

更新:printf "Hello, %s\n" "$NAME"有效.为什么我没有使用echo,请考虑

echo.sh:

#! /bin/sh
FILE="C:\tmp"
echo "Filename: $FILE"
Run Code Online (Sandbox Code Playgroud)

命令行:

$ ./echo.sh
Filename: C:    mp
Run Code Online (Sandbox Code Playgroud)

POSIX规范的echo说,"我们鼓励新的应用程序使用printf,而不是echo"(这和其他原因).

unix shell

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