Oracle网站上提供了Java 7规范,但我无法在任何地方找到Java 8规范,尽管互联网上提供了Java 8测试版的下载.
你有一个想法:它已经写好了,它可以在哪里下载?如果规范不可用,可能是另一个可以作为(或接近)规范的文件?
更多的问题出于好奇而不是任何事情,但为什么C#为关键字定义了两个不同的"目的" using?一方面,它是一个指令......
用于为命名空间创建别名或导入在其他命名空间中定义的类型.
另一方面,这是一个......
定义一个范围,在该范围之外将放置一个或多个对象.
对我而言,对于相同的关键字似乎有不同的用途,但也许我错过了一些东西.这个关键字有两个不同的用途吗?或者,这两个目的,在编译器的腹部深处,真的是一样的东西?
这与我对"流减少不兼容类型"的回答有关.我不知道为什么我的建议有用,而霍尔格正确地向我施压.但即使他似乎也没有清楚解释它为何起作用.那么,让我们问它自己的问题:
以下代码无法编译javac(对于下面的ideone链接,这是sun-jdk-1.8.0_51根据http://ideone.com/faq):
public <T> Object with(Stream<Predicate<? super T>> predicates) {
return predicates.reduce(Predicate::or);
}
Run Code Online (Sandbox Code Playgroud)
这是正确的:或者将这个流中的两个谓词组合在一起就像写:
Predicate<? super T> a = null;
Predicate<? super T> b = null;
a.or(b); // Compiler error!
Run Code Online (Sandbox Code Playgroud)
但是,它确实在intellij中编译,尽管在Predicate::or方法引用上有原始类型警告.显然,它也会在eclipse中编译(根据原始问题).
但是这段代码确实:
public <T> Object with(Stream<Predicate<? super T>> predicates) {
return predicates.map(a -> a).reduce(Predicate::or);
// ^----------^ Added
}
Run Code Online (Sandbox Code Playgroud)
尽管我想要尝试这个,但我并不完全清楚为什么这会起作用.我的手工波形解释是,.map(a -> a)行为类似于"强制转换",并为类型推断算法提供了更多的灵活性来选择允许reduce应用的类型.但我不确定那种类型到底是什么.
请注意,这不等于使用.map(Function.identity()),因为它被约束为返回输入类型.ideone demo
任何人都可以解释为什么这可以参考语言规范,或者如Holger建议的那样,它是一个编译器错误?
更详细一点:
该方法的返回类型可以更具体一些; 我在上面省略了它,以便返回类型上令人讨厌的泛型不会妨碍:
public <T> …Run Code Online (Sandbox Code Playgroud) 究竟是如何foreach在C#中实现的?
我想它的一部分看起来像:
var enumerator = TInput.GetEnumerator();
while(enumerator.MoveNext())
{
// do some stuff here
}
Run Code Online (Sandbox Code Playgroud)
但是我不确定究竟发生了什么.enumerator.Current每个周期使用什么方法返回?它是为[每个循环]返回还是需要匿名函数或其他东西才能执行foreach?
我已经阅读了HTML5规范<command>,发现这个元素的信息非常模糊.
我已经尝试过,发现它不能在Chrome(最新版本)中工作,它正在使用Safari(甚至是较旧版本),抱歉没有FF(请不要拍我) - Mac只测试.
我无法理解这个元素的用途是什么,即使我正确使用它.
我提前感谢您对此有任何澄清!
我试图使var1中的无序变量列表出现两次,var2出现无限次(我的项目中的用例不同).该元素不允许我使用maxOccurs.
我正在尝试做什么工作?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="testcomment">
<xs:complexType>
<xs:all>
<xs:element name="var1" type="xs:string" maxOccurs="2" />
<xs:element name="var2" type="xs:integer" maxOccurs="unbounded" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud) 我有以下用C++和C#编写的代码
int i=0;
++i = 11;
Run Code Online (Sandbox Code Playgroud)
在此C#编译器带来错误之后
The left-hand side of an assignment must be a variable, property or indexer
Run Code Online (Sandbox Code Playgroud)
但C++编译器生成此代码没有错误,我得到了11值的结果i.这种差异的原因是什么?
我想知道为什么它是Java不允许超负荷Foo(Object[] args)使用Foo(Object... args),虽然他们都以不同的方式使用?
Foo(Object[] args){}
Run Code Online (Sandbox Code Playgroud)
使用如下:
Foo(new Object[]{new Object(), new Object()});
Run Code Online (Sandbox Code Playgroud)
而另一种形式:
Foo(Object... args){}
Run Code Online (Sandbox Code Playgroud)
使用如下:
Foo(new Object(), new Object());
Run Code Online (Sandbox Code Playgroud)
这背后有什么理由吗?
我从来没有公布这种性质的问题之前,因此,如果它是不恰当的,只需不伤害我的感情太糟糕了,我会删除它.
为了尽可能保持我所关心的一切尽可能接近左边距,我一直希望能写出如下内容:
DataService1.DataEntities dataEntities = new(constructorArg1, ...)
Run Code Online (Sandbox Code Playgroud)
我认为另一个原因是我喜欢通过使用var获得的额外屏幕空间,当类型已经出现在作业的右侧时,但我的大脑有太多年来在左侧寻找类型.再说一遍,被困在我的方式并不是一个很好的理由,希望有一个规范......
考虑以下病理示例:
class Ideone {
static class ArrayList<T> {
ArrayList() {
System.out.println("!!");
}
}
static class java {
static class util {
static class ArrayList<T> {
ArrayList() {
System.out.println("Here");
}
}
}
}
public static void main(String[] args) {
new ArrayList<>();
new java.util.ArrayList<>();
// Can I refer to the "usual" java.util.ArrayList?
}
}
Run Code Online (Sandbox Code Playgroud)
在构造函数中创建的两个实例是嵌套类.
但是我怎么能java.util.ArrayList在同一个班级中提到我们都知道和喜欢的东西呢?我们无法导入它,并且我们不能使用完全限定名称,因为将使用嵌套类符号.
在这种情况下我们能做些什么?(除了明显的 - 停止使用嵌套类的这些肆无忌惮的邪恶名称).