我正在寻找替代方案来开发多个移动平台,并找到了使用Java作为通用语言的Codename One,而不是HTML/CSS/JS或脚本语言.
我找不到的是它是如何工作的.它是否将JVM与iOS和Win7的应用程序捆绑在一起,并在Android中使用Dalvik?它是否将源代码转换为本机代码,我们是否可以访问此源代码?还有其他魔法,考虑到他们承诺"不妥协"吗?在编码不可知的Java时我应该注意哪些限制?
先发制人的罢工:这是一个关于Codename One的问题,不是关于我应该选择哪个跨平台,或者我应该去当地还是应该去网络.
我想将Web服务URL请求表示为对象,并发现有许多常见参数可以在继承层次结构中"冒泡".一个请求可能有很多参数,一些是必需的,另一些是可选的,我相信Bloch的Builder模式是一个很好的选择,用一个流畅的接口模拟命名参数.
具体来说,我正在设计Google Maps Web服务API,它具有一般的Web服务请求
http://maps.googleapis.com/maps/api/service/output?{parameters}
Run Code Online (Sandbox Code Playgroud)
service
并且output
是必需参数和sensor
必需参数.还有一个可选参数language
.
每个服务都有一组强制和可选参数.地理编码服务有两个可选参数,bounds
和region
.它还具有互斥的强制参数,address
或者location
指定服务类型(分别为直接或反向地理编码).我用新的儿童班来代表这种互斥.
我想象类层次结构如下:
.-----.
| Url |
'-----'
^
|
.---------.
| Request |
'---------'
^
|----------------------------+--------------...
.---------. .------------.
| Geocode | | Directions |
'---------' '------------'
^ ^
|------------+ .
.--------. .---------. .
| Direct | | Reverse | .
'--------' '---------'
Run Code Online (Sandbox Code Playgroud)
然后,我想做类似以下的事情:
String output = "xml";
boolean sensor = true;
String address = "Av. Paulista, São Paulo, Brasil"; …
Run Code Online (Sandbox Code Playgroud) 我有一个实体,有一个DiscriminatorColumn
,配置为单表继承:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE")
public class ContainerAssignment{
...
}
Run Code Online (Sandbox Code Playgroud)
'ContainerAssignment'引用了另一个实体:
@JoinColumn(name="CONTAINER_ID")
private Container container;
Run Code Online (Sandbox Code Playgroud)
容器可以具有ContainerAssignment
每种类型中的一种.这意味着ContainerAssignment
表的主键由CONTAINER_ID
和定义TYPE
.
ContainerAssignment
有一些子类,例如
@Entity
@DiscriminatorValue("SOME_TYPE")
public class SomeTypeOfContainerAssignment extends ContainerAssignment{
...
}
Run Code Online (Sandbox Code Playgroud)
SomeTypeOfContainerAssignment
给定的只有一个实例CONTAINER_ID
.
如果我将JPA定义@Id
为ContainerAssignment表上的Container,我可以做到entityManager.find(SomeTypeOfContainerAssignment.class, containerId)
,这很好.这有点像SELECT * FROM CONTAINER_ASSIGNMENT WHERE CONTAINER_ID = 1 AND TYPE = 'SOME_TYPE';
.它知道它需要在这里进行TYPE检查,因为@DiscriminatorValue("SOME_TYPE")
实体上有注释.
但是,这意味着从Container到ContainerAssignment的后引用中断,因为Container实际上不是主键.例如,如果Container有一个@OneToOne(mappedBy=container) private SomeTypeOfContainerAssignment assignment;
,当你读入一个容器时,它将通过类似的方式读取赋值SELECT * FROM CONTAINER_ASSIGNMENT WHERE CONTAINER_ID = 1;
,而不进行类型检查.这给了它一个容器的所有赋值,然后它看起来随机选择一个,可能是错误的类型,在这种情况下,它抛出一个异常.
相反,我@Id …
我需要在Windows中使用软件渲染OpenGL,并且已经发现了Mesa3D,它没有提供DLL,而且我有一些痛苦要构建......有替代方案吗?
[TL; DR:以下JVM字节码指令似乎不起作用:
iconst_0
istore 6
...sequential
iinc 6 1
jsr L42
...
; L42
iload 6
ifeq L53 ; Always branches!!!
astore 8
iinc 6 -1
; L53
LDC 100
ISUB ; ERROR, returnAddress is at the top of the stack
Run Code Online (Sandbox Code Playgroud)
可以在此处找到测试.class (具有稍微复杂的逻辑)。如果您想进一步了解为什么我会看到这些说明,请继续阅读。]
我正在编写针对JVM字节码的Whitespace编译器。尽管是一种深奥的语言,但是Whitespace向堆栈计算机描述了一组有趣的汇编指令,该堆栈计算机很好地映射到了JVM。
空格具有标签,它们都是跳转(goto / jump-if-zero / jump-if-negative)和函数调用的目标。相关说明(由我给定的名称,在规范中以空格,制表符和换行符的组合形式给出)为:
mark <label>
:为以下说明设置标签jump[-if-neg|-if-zero] <label>
:无条件或有条件地跳转到给定标签call <label>
:调用标签所指向的函数end <label>
:结束功能,返回到调用方。我的编译器以类的main方法输出整个Whitespace程序。实现call
和的最简单方法end
是使用JSR
和RET
操作码,用于实现子例程。JSR
操作完成后,堆栈将包含一个returnAddress
引用,该引用应存储在变量中,以供以后在中使用end
。
但是,mark …
我对SQL很陌生,我正在尝试做一些不是愚蠢的事情.为了给出一些背景信息,我正在比较运营商分支中车辆的规划和实现用途,并且需要计算两者的出现次数.我有一个with subquery as
返回类似以下内容的东西
PLANNED | REALIZED
---------+----------
TRUCK | BI-TREM
TRUCK | TRUCK
TRUCK | TRUCK
TRUCK | TRUCK
TRUCK | TRUCK
CARRETA | CARRETA
CARRETA | CARRETA
TRUCK | KOMBI
TRUCK | BI-TREM
CARRETA | KOMBI
CARRETA | KOMBI
TRUCK | TRUCK
CARRETA | CARRETA
CARRETA | BI-TREM
CARRETA | CARRETA
CARRETA | CARRETA
TRUCK | BI-TREM
Run Code Online (Sandbox Code Playgroud)
并希望返回类似以下内容
VEHICLE | TOTAL_PLANNED | TOTAL_REALIZED
--------+---------------+---------------
CARRETA | 8 | 5
TRUCK | 9 | 5
BI-TREM | 0 …
Run Code Online (Sandbox Code Playgroud) 我java.util.ConcurrentModificationException
在这个方法上得到以下内容
private AtomicReference<HashMap<String, Logger>> transactionLoggerMap = new AtomicReference<HashMap<String,Logger>>();
public void rolloutFile() {
// Get all the loggers and fire a temp log line.
Set<String> transactionLoggerSet = (Set<String>) transactionLoggerMap.get().keySet();
Iterator<String> transactionLoggerSetIter = transactionLoggerSet.iterator();
while(transactionLoggerSetIter.hasNext()){
String key = (String) transactionLoggerSetIter.next();
Logger txnLogger = transactionLoggerMap.get().get(key);
localLogger.trace("About to do timer task rollover:");
txnLogger.info(DataTransformerConstants.IGNORE_MESSAGE);
}
}
Run Code Online (Sandbox Code Playgroud)
请建议,如果我使用原子参考,我如何获得como?
我是从Clojure来到Python的,并且想知道是否有办法在生成器中有一个"临时变量".
在Clojure中,我可以使用let
内部的for生成器来命名项目的中间计算:
(def fnames ["abc1234" "abcdef" "1024"])
(for [fname fnames
:let [matches (re-matches #"(\w+?)(\d+)" fname)]
:when matches]
matches)
;=> (["abc10" "abc" "1234"] ["1024" "1" "024"])
Run Code Online (Sandbox Code Playgroud)
在Python中,我需要使用两次生成器来过滤掉None
结果:
fnames = ["abc1234", "abcdef", "1024"]
matches = [re.match('(\w+?)(\d+)', fname) for fname in fnames]
matches = [match.groups() for match in matches if match is not None]
# [('abc', '1234'), ('1', '024')]
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法做以下事情?如果没有,最恐怖的方式是什么?
matches = [re.match('(\w+?)(\d+)', fname) as match
for fname in fnames
if match is not None]
Run Code Online (Sandbox Code Playgroud)