小编oku*_*ane的帖子

如何通过反射获取方法引用?

假设我有一些像Function这样的函数接口和一些不同类的方法,我可以为它们提供方法引用,例如:

class A {
   public int getPrimitive() { return 0; }
   public Integer getBoxed() { return 0; }
   public static int getStaticPrimitive(A a) { return 1; }
}

Function<A, Integer> primitive = A::getPrimitive;
Function<A, Integer> boxed = A::getBoxed;
Function<A, Integer> staticPrimitive = A::getStaticPrimitive;
Run Code Online (Sandbox Code Playgroud)

我如何通过反射获取从A类转换为Function接口实例的所有可能的方法引用?

更新:

到目前为止,这个问题与评论中提到的任何问题都不重复,但多亏了Holger在评论中提到的两个问题,我已经设法做了我需要的事情:

    class Test {
    public static void main(String[] args) throws Throwable {
        HashMap<String, Function<A, Integer>> map = new HashMap<>();

        Collection<MethodType> supportedTypes = Arrays.asList(
                MethodType.methodType(int.class, A.class),
                MethodType.methodType(Integer.class, A.class)
        );

        MethodType inT = MethodType.methodType(Function.class);
        MethodHandles.Lookup …
Run Code Online (Sandbox Code Playgroud)

java reflection java-8 method-reference

6
推荐指数
0
解决办法
93
查看次数

如何打开"nul"文件?

我需要创建一个新的进程,将标准错误流重定向到某个文件.正在创建子进程的代码没有可用的控制台,因此有些情况下GetStdHandle(any)将返回0.由于某种原因,子进程将尝试复制其所有标准IO句柄(子进程的源代码不可用)所以它的所有句柄都应该是有效的.

因此,我需要以与从控制台运行的方式相同的方式运行该过程:

someproc <nul >nul 2>err
Run Code Online (Sandbox Code Playgroud)

我看到了一些方法:1.创建两对管道.这可能是一个很好的解决方案,但对我来说太复杂了.2.使用CreateFile("nul",...)函数调用打开"nul"文件.此调用没有创建文件,但这看起来很奇怪.3.使用INVALID_HANDLE_VALUE.这也有效,但我认为另一个子进程可能存在不同的问题.

我相信有更好的方法.

winapi

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

如何强制gcc预处理器保留空格?

对于代码:

int  i;
Run Code Online (Sandbox Code Playgroud)

gcc预处理器输出:

int i;
Run Code Online (Sandbox Code Playgroud)

如何强制它保留空白?

我用以下命令调用预处理器:gcc -E somefile.c命令.

whitespace gcc c-preprocessor

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

DYLD_PRINT_LIBRARIES 不工作

尝试使用其他 DYLD_ 属性进行试验时,我发现 jvm 正在使用属性进行操作,并且在执行过程中会忽略这些属性。
我的 Java 测试:

class Env {
    public static void main(String... args) {
        System.getenv().entrySet().stream().forEach(e -> System.out.println(e.getKey() + " = " + e.getValue()));
    }
}
Run Code Online (Sandbox Code Playgroud)

调用:

$ export DYLD_PRINT_LIBRARIES=1
$ export MY_PRINT_LIBRARIES=2
$ javac Env.java && java Env|grep PRINT
MY_PRINT_LIBRARIES = 2
$ 
Run Code Online (Sandbox Code Playgroud)

另一方面,我的 C 测试:

#include <stdio.h>

int main(int argc, char **argv, char **envp) {
    while (*envp) {
        printf("%s\n", *envp);
        envp++;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

调用:

$ gcc env.c && ./a.out|grep PRINT
dyld: loaded: /Users/okutane/test/java/./a.out
dyld: …
Run Code Online (Sandbox Code Playgroud)

java macos darwin dyld dynamic-library

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

是否有可能通过内部的JSP代码通过html注释进行XSS攻击?

以下代码是否在某些JSP页面中添加了XSS漏洞?

<!--    <%=paramName%>=<%=request.getParameter(paramName)%><BR>  -->
Run Code Online (Sandbox Code Playgroud)

它看起来像一个"剩余的调试",绝对应该从代码中删除,但它有多危险?

html security xss jsp

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

迭代相同大小的子串

我想将我的String对象转换为其1个大小的子串(不是字符串)的Enumerable,我怎样才能在Ruby中有效地执行此操作?

ruby string slice

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