草庐IT

表达力

全部标签

java - 无法使用表达式递增字节值但使用递增运算符

这个问题在这里已经有了答案:whybyte+=1compilebutbyte=byte+1not?(8个答案)关闭9年前。为什么以下是有效的bytei=0;i++;以下是无效的bytei=0;i=i+1;会是什么原因呢?我知道在i+1的情况下,整个值显式增加1(这将是int值)所以会出现编译问题,但万一i++它做同样的事情但没有得到任何错误。

java - Lambda 表达式可以访问其范围之外的类的私有(private)方法吗?

我想获得对java.lang.String包私有(private)构造函数的反射访问。即,这个:/**Packageprivateconstructorwhichsharesvaluearrayforspeed.*thisconstructorisalwaysexpectedtobecalledwithshare==true.*aseparateconstructorisneededbecausewealreadyhaveapublic*String(char[])constructorthatmakesacopyofthegivenchar[].*/String(char[]valu

java - 如何断言表达式不编译

我编写了一个框架,增加了对其接口(interface)进行类型安全调用的可能性。现在,在编写JUnit测试时,我想表明编译器现在会检查先前导致运行时错误的特定表达式。//thisdoesnotcompile,becausenamePropisoftypePropertyIntegername=interface.getProperty(nameProp);可能最好只是简单地注释掉该代码并让它保持原样。我只是想知道是否可以使用一些测试框架来编写类似的东西assertCompilationError(){Integername=interface.getProperty(nameProp)

java - 我如何到达 AST 表达式的底部

我是AST的新手(我第一次写插件)。现实生活中的表达方式可能非常复杂。例如,我想知道如何解析赋值的左侧和右侧。classVisitorextendsASTVisitor{@Overridepublicbooleanvisit(Assignmentnode){//here,howdoIgetthefinalnametoeacheachsideoftheassignmentresolves?}}我还有一个疑问,如何获取用于调用方法的实例?publicbooleanvisit(MethodInvocationnode){//howdoIgettoknowtheobjectusedtoinvo

java - 是否可以在运行时检索 lambda 表达式

昨晚我在玩Java8Lambda,我想知道是否可以在运行时检索Lambda表达式。简而言之,据我所知,Lambda表达式在运行时转换为(静态)方法,然后使用InvokeDynamics调用。举个例子:people.filter(person->person.getAge()>=minAge);哪里filter将是采用Predicate的自定义方法作为参数。这里面filter方法,在这种情况下,我如何以与Lambda表达式(person->person.getAge()>=minAge)相似(或相同)的形式检索参数?我尝试使用ASM5_BETA读取参数类的生成字节码,但我只能使用Clas

java - 如何为 Java 类字段生成准确的泛型表达式?

我正在尝试在运行时推理泛型。有几个很棒的库可以做到这一点(例如gentyref、ClassMate和Guava)。然而,它们的用法有点让我难以理解。具体来说,我想提取一个与子类上下文中的特定字段匹配的表达式。这是一个使用gentyref的例子:importcom.googlecode.gentyref.GenericTypeReflector;importjava.lang.reflect.Field;importjava.lang.reflect.Type;publicclassExtractArguments{publicstaticclassThing{publicTthing;

java - 如何使用 java8 lambda 表达式抛出自定义检查异常?

这个问题在这里已经有了答案:Java8:Lambda-Streams,FilterbyMethodwithException(15个答案)关闭7年前。我有下面的代码。privatestaticvoidreadStreamWithjava8(){Streamlines=null;try{lines=Files.lines(Paths.get("b.txt"),StandardCharsets.UTF_8);lines.forEachOrdered(line->process(line));}catch(IOExceptione){e.printStackTrace();}finally{

java - Intellij IDEA - 使用流 API 导致错误评估表达式

我正在努力处理包含一些StreamAPI方法的评估表达式。示例:sample.reads.stream().filter(s->s.l.length()这也行不通:sample.reads.stream().filter(s->s.l.length()给出:但是,sample.reads.stream().count()或sample.reads.stream().toArray()与任何其他表达式一样工作正常(如果我将流API调用放入代码中,它也可以正常工作)配置:java:jdk1.8.0_144想法:IntelliJIDEA2017.3.1(社区版)构建#IC-173.3942.

java - lambda 表达式的类型推断限制

虽然Java8的类型推断似乎有了很大改进,但我发现了一个可能的限制,我不确定是否缺少一些解决方法。场景:classFoo{voidapply(Function>bar){}}classBar{voidsetBar(Stringbar){}}Foofoo=newFoo();这个有效:foo.apply(bar->bar::setBar);这不是:foo.apply(bar->bar::setBar);有什么方法可以让类型推断在这种情况下起作用吗? 最佳答案 这是一个eclipse错误。两者都可以用Netbeans或javac编译。Ec

java - Spring 表达式语言 - Java 8 forEach 或列表中的流

是否可以在SpEL列表中使用stream或forEach?例如Listx=newLinkedList(Arrays.asList("A","AAB"));ExpressionParserparser=newSpelExpressionParser();StandardEvaluationContextcontext=newStandardEvaluationContext(x);parser.parseExpression("x.stream().map(x->x.replaceAll(\"A\",\"B\")).collect(Collectors.toList())").getVa