我想使用过程Delete(Memo.Text,index,count)(或类似的Insert).但我收到消息'常量对象不能作为var参数传递'.我知道我可以选择文本并使用这个程序与Seltext.但这种方式有点不舒服.还有什么比这更容易了
我写了以下代码,它的工作原理非常好.问题是当我将类更改A为Generics时,A<T>它无法编译.
public class A {
class B {
}
static void m(B i) {
}
static class C extends B {
C() {
new A().super();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我更改A为A<T>编译失败并出现以下错误B.
无法对非静态类型B进行静态引用
public class A<T> {
class B {
}
static void m(B i) {
}
static class C extends B {
C() {
new A().super();
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么它在第一种情况下工作正常并且第二次失败
class Cube{
int side;
int area = side * side;
}
public class Chronos{
public static void main(String[]args) {
Cube a = new Cube();
a.side = 2;
System.out.println(a.area);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么它输出"0"而不是将给定变量乘以
a.side=2它自己并给出a.area=4.我的思维过程是,它会看到打印的命令a.area,检查Cube并看到它a.side本身已经确定的倍增.
这是我的第一个代码:
public class MethodReference {
public static void main (String []args) {
Stream<String> s = Stream.of("brown bear", "grizzly");
s.sorted(Comparator.reverseOrder()).forEach(System.out::print);
//...
}
}
Run Code Online (Sandbox Code Playgroud)
结果:灰熊熊
这是我的第二个代码:
public class MethodReference {
public static void main (String []args) {
Stream<String> s = Stream.of("brown bear", "grizzly");
s.sorted(Comparator::reverseOrder()).forEach(System.out::print);
//...
}
}
Run Code Online (Sandbox Code Playgroud)
结果:编译器错误
我的问题:为什么第二个代码中存在编译器错误?我不能将方法参考用于功能接口的静态方法吗?
我知道我不能使用方法引用和函数接口的默认方法.我知道我可以在5种情况下使用类的方法引用:
类
类:: STATICMETHOD
类:: instanceMethod
例如:: instanceMethod
类::新
功能界面
非常感谢!
我对Gosu不太了解,所以这段代码使我感到困惑。我已经用谷歌搜索,等等,但是都无济于事。此代码段中的反斜杠是做什么的?
GET_STUFF.execute(\ -> {
var gig = withPackagedGig(request.id, request.signature, \ k -> {
k.addItem("Log_RetrievedGig");
return k;
});
myObj = toObj(gig);
})
Run Code Online (Sandbox Code Playgroud) 我正在使用 Java 8 的 lambda 表达式来分区列表(使用.collect(Collectors.partitioningBy(...))),我需要我的分区标准是元素是否是给定类的实例。
做如下工作
list.stream().collect(Collectors.partitioningBy(elt -> elt instanceof EltType))
Run Code Online (Sandbox Code Playgroud)
但是是否存在InstanceOf可以通过方法引用使用的现有“ ”谓词?
在Java的instanceof模式匹配中,使用附加标识符来缩小类型:
Object o = "test";
if (o instanceof String s) {
System.out.println(s.length()); // s is of type String
}
Run Code Online (Sandbox Code Playgroud)
为什么有必要?JEP似乎没有证明其合理性,但我确信这是有原因的。以下有什么不好的地方?
Object o = "test";
if (o instanceof String) {
System.out.println(o.length());
}
Run Code Online (Sandbox Code Playgroud)
TypeScript和Kotlin可以做类似的事情,而无需另一个标识符。
我猜这是一个向后兼容性的问题——Java 的怪癖通常是这样——但我想不出一个可以证明这一点的例子。
我唯一能想到的是,有人可能编写了类似于第二个示例预模式匹配的内容,并依赖它来不编译,但这似乎是一个薄弱的理由。
我使用下面的代码将用 Winword 制作的 UTF8 文件读入 Tmemo(尝试了所有 2 种方法)。该文件包含 IPA 发音字符。对于这些字符,我只看到正方形。我尝试了不同版本的 tmemo.font.charset,但没有帮助。
我能做些什么?
彼得
// OD is an TOpenDialog
procedure TForm1.Load1Click(Sender: TObject);
{
var fileH: textFile;
newLine: RawByteString;
begin
if od.execute (self.Handle) then begin
assignFile(fileH,od.filename);
reset(fileH);
while not eof(fileH) do begin
readln(fileH,newLine);
Memo1.lines.Add(UTF8toString(newLine));
end;
closeFile(fileH);
end;
end;
}
var
FileStream: tFileStream;
Preamble: TBytes;
memStream: TMemoryStream;
begin
if od.Execute then
begin
FileStream := TFileStream.Create(od.FileName,fmOpenRead or fmShareDenyWrite);
MemStream := TMemoryStream.Create;
Preamble := TEncoding.UTF8.GetPreamble;
memStream.Write(Preamble[0],length(Preamble));
memStream.CopyFrom(FileStream,FileStream.Size);
memStream.Seek(0,soFromBeginning);
memo1.Lines.LoadFromStream(memStream);
showmessage(SysErrorMessage(GetLastError));
FileStream.Free;
memStream.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud) 我正在使用AssertJ进行测试,并且注意到有一种检查a List<T>是否排序的方法:
public static <T> void sorted(final List<T> actual) {
try {
assertThat(actual).isSorted();
} catch (AssertionError e) {
LOGGER.error(e.getMessage(), e);
throw e;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法检查列表是否按降序排列?
我知道番石榴提供了,Ordering.natural().reverse().isOrdered(values)但是我想利用AssertJ的assert消息,因为它确实对调试很有帮助,例如
group is not sorted because element 5:
<"4000366190001391">
is not less or equal than element 6:
<"4000206280001394">
group was:
<["4000206280001363",
"4000206280001364",
"4000206280001365",
"4000206280001373",
"4000206280001388",
"4000366190001391",
"4000206280001394",
"4000366190001401",
"4000206280001403",
"4000206280001405",
....]>
Run Code Online (Sandbox Code Playgroud) 我想知道这两种情况之间的差异是什么:
class Cell
{
Messages msg;
public void getMessage()
{
msg.getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
和:
class Cell
{
Messages msg = new Messages();
public void getMessage()
{
msg.getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道在第一个例子中我只声明了字段,而在第二个例子中我声明了字段,对象和指定对象到字段.但是在这两种情况下我都可以.getMessage()在Cell课堂上使用方法,那么什么是差异?我应该使用什么?