我有一个匿名的内部类和一个等效的lambda.为什么变量初始化规则对lambda更严格,是否有比匿名内部类更清晰的解决方案或在构造函数中初始化它?
import java.util.concurrent.Callable;
public class Immutable {
private final int val;
public Immutable(int val) { this.val = val; }
// Works fine
private final Callable<String> anonInnerGetValString = new Callable<String>() {
@Override
public String call() throws Exception {
return String.valueOf(val);
}
};
// Doesn't compile; "Variable 'val' might not have been initialized"
private final Callable<String> lambdaGetValString = () -> String.valueOf(val);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我确实遇到了一个解决方法:使用getter for val.
我requests用来从远程URL获取图像.由于图像总是16x16,我想将它们转换为base64,以便我可以稍后嵌入它们以在HTML img标记中使用.
import requests
import base64
response = requests.get(url).content
print(response)
b = base64.b64encode(response)
src = "data:image/png;base64," + b
Run Code Online (Sandbox Code Playgroud)
输出response是:
response = b'GIF89a\x80\x00\x80\x00\xc4\x1f\x00\xff\xff\xff\x00\x00\x00\xff\x00\x00\xff\x88\x88"""\xffff\...
Run Code Online (Sandbox Code Playgroud)
HTML部分是:
<img src="{{src}}"/>
Run Code Online (Sandbox Code Playgroud)
但图像不显示.
我怎样才能正确地对64进行编码response?
当您拥有的价值高于计算成本时,您在日志记录框架中看到的常见模式是
if (log.isDebugEnabled()) {
String value = expensiveComputation();
log.debug("value: {}", value);
}
Run Code Online (Sandbox Code Playgroud)
由于Java 8添加了lambdas,所以做得很好:
log.debug("value: {}", (Supplier<String>) this::expensiveComputation);
Run Code Online (Sandbox Code Playgroud)
这几乎起作用,因为日志框架将对toString()参数执行.问题是toString()在Supplier是在执行Object.
有没有办法提供一些懒惰地评估Logger方法的东西?它几乎只是Supplier一个默认toString()调用get().
我一直在与使用OpenCL的多核CPU线程进行GPU线程同步.我确实看到了一些CUDA示例,但是,如果有人能够在OpenCL方面给我一些关于同步部分的提示,我会更清楚这个概念.提前感谢您对此事的任何帮助.
我正在尝试使用JAXB来解组一些XML,但我得到了"无法创建...的实例"异常.我理解为什么 - 它试图创建一个抽象类的实例.我想要的是让它成为特定实现类的实例.我的目标是对setter方法进行特定于类的检查.也许"qux"是BarImpl的有效baz值,但BarImpl2想要做其他事情.
我通过不注释Foo来获得部分路径,但如果我不注意bar,事情就会变得难看.
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.junit.Test;
public class JAXBTest {
@Test
public void test() throws javax.xml.bind.JAXBException {
String xml =
"<foo>" +
" <bar>" +
" <baz>qux</baz>" +
" </bar>" +
"</foo>";
javax.xml.bind.JAXBContext context = javax.xml.bind.JAXBContext.newInstance(
FooImpl.class,
BarImpl.class
);
javax.xml.bind.Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.unmarshal(new java.io.StringReader(xml));
}
@XmlRootElement(name="foo")
public static abstract class Foo {
@XmlElement(name="bar")
Bar bar;
}
@XmlRootElement(name="bar")
public static abstract class Bar {
@XmlElement(name="baz")
String baz;
}
public static class FooImpl extends Foo { } …Run Code Online (Sandbox Code Playgroud) 我有一个 shell 脚本,想在所有支持 bash 的多个平台上运行。我的问题是某些命令在 Linux、FreeBSD、OS X 和 Cygwin 上的行为不同。
到目前为止我的想法是:
$OSTYPE特定source于实现的文件(可选)替换行为不同的命令。如果我这样做,我应该如何处理带有多个参数的命令?传递给函数的四个位置参数并不是最简洁的方法。$OSTYPE并创建一个OPSUFFIX变量,然后调用operation$OPSUFFIX每个操作。./configure魔法?我尝试使用listSecrets()App Engine 应用程序在 Secret Manager 中列出机密,但 grpc 请求在 60 秒后始终超时:
com.google.api.gax.rpc.DeadlineExceededException: io.grpc.StatusRuntimeException: DEADLINE_EXCEEDED: Deadline exceeded after 59.973305176s.
at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:51)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:72)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:60)
at com.google.api.gax.grpc.GrpcExceptionCallable$ExceptionTransformingFuture.onFailure(GrpcExceptionCallable.java:97)
at com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:68)
at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1074)
at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30)
at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1213)
at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:983)
at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:771)
at io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:563)
at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:533)
at io.grpc.internal.DelayedClientCall$CloseListenerRunnable.runInContext(DelayedClientCall.java:406)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Suppressed: com.google.api.gax.rpc.AsyncTaskException: Asynchronous task failed
Run Code Online (Sandbox Code Playgroud)
我验证了我可以使用 App Engine 中的其他 GCP 服务,并且我的 App Engine 默认服务帐户具有 Secret Manager 角色。我的应用程序是标准环境中的第二代 Java 11 应用程序。我正在使用libraries-bom(最新的)v23.0.0。当我在本地运行相同的代码时,它工作正常,并且不会超过几秒钟,所以我想知道这是否是 App Engine 环境或其服务帐户的问题。
更新:我最终使用了 google-api-services-secretmanager/google-api-client/google-auth-library-oauth2-http。这个片段在本地和 …
google-app-engine google-cloud-platform google-secret-manager
我试图弄清楚它是如何工作的.当我引用一个尚未声明的命名Javascript函数时,在某些情况下,它可以工作.但是,如果我使用函数文字,它不会,但它也不会失败ReferenceError.
function works() {
var works_ref = foo;
function foo() {
console.log('ok');
};
console.log('works ' + works_ref);
}
function fails() {
var fails_ref = foo;
var foo = function() {
console.log('ok');
};
console.log('fails ' + fails_ref);
}
works();
fails();
Run Code Online (Sandbox Code Playgroud)
这回来了
"works function foo() {
console.log('ok');
}"
"fails undefined"
Run Code Online (Sandbox Code Playgroud)
我想知道第一个例子是如何工作的 - 这是一个解释语言,没有编译,所以我希望任何类型的前向引用都会失败 - 为什么第二个例子不能生成ReferenceError?
我遇到了"mapreduce工作的链接".作为mapreduce的新手,在什么情况下我们必须链接(我假设链接意味着一个接一个地依次运行mapreduce作业)工作?
有没有可以提供帮助的例子?
在in文字上使用运算符时,对于该文字来说,最常用的是列表,集合还是元组?
例如
for x in {'foo', 'bar', 'baz'}:
doSomething(x)
...
if val in {1, 2, 3}:
doSomethingElse(val)
Run Code Online (Sandbox Code Playgroud)
我没有看到列表有任何好处,但是元组的不可变性意味着它可以由高效的解释器提升或重用.if如果是,如果它被重用,那么效率就会受益.
哪个是最惯用的,哪个在cpython中表现最好?
BigQuery 将 Javascript 用于其用户定义的函数。BYTESBigQuery 中的输入和输出在 Javascript 中与 base64 编码的字符串相互映射。
BigQuery的没有浏览器的window对象,所以atob和btoa失踪。在 Bigquery JS 环境中是否有一种简单的编码和解码方法,或者您是否必须包含一个用于进行映射的库?