既然我们可以throw在Javascript中使用关键字抛出任何内容,那么我们不能直接抛出错误消息字符串吗?
有谁知道这有什么捕获?
让我为此添加一些背景:很多时候,在JavaScript世界中,人们依赖于参数检查而不是使用try-catch机制,所以只抛出致命错误才有意义throw.仍然,为了能够捕获一些系统错误,我必须为我自己的错误使用不同的类,而不是创建Error的子类,我想我应该只使用String.
我正在使用jQuery的$.widget()基类"类",它提供了一种option()方法.由于该方法不在我的代码中,因此我无法记录参数.
我试图将jsDoc放在默认选项文字中的字段上,但它们根本就没有被选中.然后我尝试在同一个对象文字上使用@class和@lends标签,但这可能会让人很困惑,因为对象文字实际上并不是一个类.
我尝试过的另一种方法是@param options.field description在构造函数的jsDoc中添加类似的东西.但是,这样做的缺点是将文档与代码分开.此外,构造函数实际上没有调用的参数,options因为它全部由jQuery处理.
你是如何Javascript专家处理这个?是否应该提出新标签?
import java.util.concurrent.Callable;
class Ideone
{
Callable<?> x = super::clone;
}
Run Code Online (Sandbox Code Playgroud)
使用Oracle JDK提供:
Main.java:6: error: incompatible types: invalid method reference
Callable<?> x = super::clone;
^
clone() has protected access in Object
Run Code Online (Sandbox Code Playgroud)
这没有意义,因为类应该能够访问其父级的受保护方法.这个表达式在Eclipse的编译器中运行良好.
还() -> super.clone()编译好......
这是一个错误吗?
如果你看一下Sun的实现的源代码Class.getSimpleName(),你会发现它似乎每次调用它时都会返回一个新的String实例.但是,Class类中的许多其他功能都是缓存的.
由于简单的名称计算似乎并不容易,并且JavaDoc中没有任何内容表明它必须每次返回一个新实例,因此它应该是缓存的一个很好的候选者.我想知道为什么这个没有缓存有任何设计原因?
我问,因为许多框架一直使用简单的名称,这是一个很容易缓存的东西.
我从Chrome开发人员工具的控制台获得了以下跟踪:
> a = [1]
[1]
> b = [2, a]
[2, Array[1]]
> a.push(b)
2
> a.toString()
"1,2,"
Run Code Online (Sandbox Code Playgroud)
似乎toString()智能地跳过了对象图的递归部分.这是在某处记录的标准行为吗?
我需要将两个类的功能合并为一个,但我想知道我可以将他们的更改历史记录合并吗?
这两个类都包含许多以前的更改,因此我希望将更改历史记录保存在一个位置以供参考.我可以在组合类中发表评论,但在IDE中,获取已删除文件的历史记录并不容易.
(这很难搜索,因为结果都是关于"方法参考")
我想获得一个Methodlambda表达式的实例,以便与基于遗留反射的API一起使用.应该包含clousure,因此调用thatMethod.invoke(null, ...)应该与调用lambda具有相同的效果.
我看过MethodHandles.Lookup,但它似乎只与逆向变换有关.但我想这种bind方法可能有助于包括clousure?
编辑:
说我有lambda experssion:
Function<String, String> sayHello = name -> "Hello, " + name;
Run Code Online (Sandbox Code Playgroud)
我有一个具有API 的遗留框架(SpEL)
registerFunction(String name, Method method)
Run Code Online (Sandbox Code Playgroud)
这将调用Method没有this参数的给定(即假定方法是静态的).所以我需要得到一个Method包含lambda逻辑+ clousure数据的特殊实例.
我正在使用Eclipse JSDT,默认格式设置改变了类似的东西
var a = 1,
b = 2;
Run Code Online (Sandbox Code Playgroud)
在一条丑陋的线上.
JSLint推荐格式化之前的样式,所以我想知道可以将Eclipse设置为以这种方式格式化吗?现有的格式化程序设置不提供对它看起来的逗号语句的控制.
StaticClass::new给定外部类实例的内部类是否有相同的东西?
编辑:
即如果我有
class Outer {
class Inner {
}
}
Run Code Online (Sandbox Code Playgroud)
我可以Outer o = new Outer(); Inner i = o.new Inner()用旧Java 做.如何表达o.new Inner()as函数引用.
创建一个类似的
public class Play {
public static void main(String[] args) throws Exception {
outer(Integer.class, inner("abc"));
}
static <C> void outer(Class<C> c, List<? super C> s){
}
static <C> List<C> inner(C c) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
它在Java 8中编译!(在Eclipse 4.5和JDK1.8_25中都有)https://ideone.com/Q9JLHP
在Eclipse中,所有的边界都被正确地推断出来,但是如何通过参数来outer捕获?Supplier<? super Integer>Supplier<String>
编辑:澄清这是Java 8特定的,并使示例不那么混乱.
java ×4
java-8 ×4
javascript ×4
lambda ×3
eclipse ×1
java-stream ×1
jsdoc ×1
jsdt ×1
mercurial ×1
reflection ×1
typechecking ×1