我有兴趣使用Mono编写一些跨平台代码,以期针对移动iOS和Android运行时.
我已经仔细阅读过Mono和MonoTouch网站,但是没有看到任何特别建议不使用的方法,或Mono钩子应该避免.然而,这看起来有点太好了.
我应该注意进入这个项目有哪些限制,以确保代码的最大可移植性?
给出了Java中同一个类的两个方法:
public void doSomething( Person person );
public void doSomething( Employee employee );
Run Code Online (Sandbox Code Playgroud)
哪里
Employee extends Person
Run Code Online (Sandbox Code Playgroud)
如果我打电话:
doSomething( employee )
Run Code Online (Sandbox Code Playgroud)
我发现它doSomething( Person )被调用了.
我原本期望调用最接近的匹配合约的重载,而不是最抽象的(这是我发现的)
有人能解释为什么吗?
我正在尝试将Antlr用于一些类似IDE的函数 - 专门解析文件以识别代码折叠的点,以及应用语法高亮.
第一个问题 - Antlr是否适合此要求,还是过度杀伤?这可以使用正则表达式和/或手动解析器来实现......但似乎Antlr在那里为我做这项工作.
我有过一看......和优秀的教程资源在这里.
我已经设法建立了一个Java语法(使用标准语法),并将所有内容整齐地解析为树.但是,我希望看到嵌套在树中的元素.事实上,一切都是最重要元素的孩子.
例如.鉴于:
package com.example
public class Foo {
String myString = "Hello World"
// etc
}
Run Code Online (Sandbox Code Playgroud)
我原本期望Foo的树节点是包声明的节点的子节点.同样,myString将是Foo的孩子.
相反,我发现Foo并且myString(以及其他所有事情)都是孩子的package.
这是解析的相关摘录:
public void init() throws Exception {
CharStream c = new ANTLRFileStream(
"src/com/inversion/parser/antlr/Test.code");
Lexer lexer = new JavaLexer(c);
CommonTokenStream tokens = new CommonTokenStream(lexer);
JavaParser parser = new JavaParser(tokens);
parser.setTreeAdaptor(adaptor);
compilationUnit_return result = parser.compilationUnit();
}
static final TreeAdaptor adaptor = new CommonTreeAdaptor() {
public …Run Code Online (Sandbox Code Playgroud) 我目前正在将应用程序从Flex 4.1升级到4.5
我们注意到,当在小尺寸下使用时,Arial字体在两个版本之间的呈现方式不同.
这是一个简单的应用示例:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
@font-face {
src: url("/assets/fonts/ARIAL.ttf");
fontFamily: arial;
embedAsCFF: true;
}
@font-face {
src: url("/assets/fonts/ARIALBD.ttf");
fontFamily: arial;
embedAsCFF: true;
font-weight: bold;
}
global
{
font-family: arial;
}
</fx:Style>
<s:Label text="Hello world" fontWeight="bold" x="20" y="20" />
</s:Application>
Run Code Online (Sandbox Code Playgroud)
当针对2个不同的sdks运行时,这是我们得到的字体渲染的图像:

请注意,在4.5中,字体看起来略微压扁.
造成这种情况的原因是什么,我们如何解决?
我从网络服务器的一些调用中看到以下响应:
初次通话:
HTTP/1.1 200 OK
Date: Mon, 16 Jan 2012 05:46:49 GMT
X-Powered-By: Servlet/2.5 JSP/2.1
Content-Type: text/plain
Content-Length: 78
Content-Encoding: gzip
Etag: "pv2052dae8634d971149a927231e3ceddf"
Cache-Control: no-cache
X-PvInfo: [S10202.C6191.A6057.RA6008.G182D.U3FAE8760].[OT/plaintext.OG/documents]
Vary: Accept-Encoding
Set-Cookie: JSESSIONID=l9pLPT5J1tpgK19Fq2qlT0F15ryByWDLgVLz16ffWPm4qQp6nzzx!-518520380; path=/; HttpOnly
DST=rd319o00000000000000000000ffffac16018bo8200; path=/
Connection: close
Run Code Online (Sandbox Code Playgroud)
后续电话:
HTTP/1.1 304 Not Modified
Date: Mon, 16 Jan 2012 05:48:43 GMT
Connection: close
Etag: "pv2052dae8634d971149a927231e3ceddf"
Cache-Control: no-cache
Vary: Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
我不清楚的是两个调用都会Cache-Control: no-cache向浏览器返回一个指令.
但是,第二次调用也会返回一个304 Not Modified.
服务器在哪里期望页面提供数据,因为它已被指示不缓存早期的响应?
有趣的是,我确实看到在浏览器中提供了响应,因此尽管使用了no-cache指令,浏览器似乎已缓存了响应.为什么?
我有一个班级
class Receipt
{
private Set<Order> orders;
public Receipt(Set<Order> orders)
{
this.orders = ImmutableSet.copyOf(orders)
}
}
Run Code Online (Sandbox Code Playgroud)
这对我很有帮助.
但是,由于我遇到的一些类型擦除和持久性问题,我现在想介绍一种形式的
class OrderSet extends Set<Order> {}
Run Code Online (Sandbox Code Playgroud)
显然我不能扩展Set<Order>,因为它是一个接口.我想将我的实现保持为不可变.但是,ImmutableSet<Order>正如文档所述,我无法扩展:
注意:尽管此类不是最终的,但它不能在其包外部进行子类化,因为它没有公共或受保护的构造函数.因此,这种类型的实例保证是不可变的.
我可以使用组合,给出OrderSet支持集合ImmutableSet并将所有Set方法委托给它.然而,这似乎有点矫枉过正.
还有另一种方法可以在这里实现非泛型子类吗?
我在使用QueryDSL创建查询时遇到问题.我想通过其ID检索某个用户的所有组.这是怎么回事?
public List<Group> findGroupsByUser(Integer userId) {
JPQLQuery query = new JPAQuery(getEntityManager());
??????
return result;
}
Run Code Online (Sandbox Code Playgroud)
映射类:
@Entity(name = "user")
public class User {
@Id
private int id;
private String login;
@ManyToMany
@JoinTable(name = "user2group", joinColumns = @JoinColumn(name = "uid"), inverseJoinColumns = @JoinColumn(name = "gid"))
private Set<Group> groups;
...
}
@Entity(name = "group")
public class Group {
@Id
private int id;
private String name;
@ManyToMany
@JoinTable(name = "user2group", joinColumns = @JoinColumn(name = "uid"), inverseJoinColumns = @JoinColumn(name = "gid"))
private Set<User> users; …Run Code Online (Sandbox Code Playgroud) 我有以下测试:
public class Book
{
public boolean postLoadInvoked;
@PostLoad
private void onPostLoad()
{
postLoadInvoked = true;
}
}
public class MyIntegrationTest extends AbstractIntegrationTest
{
@Autowired
private BookDAO bookDAO;
@Test
public void loadBooks()
{
Book book = bookDAO.findOne(...);
assertTrue(book.postLoadInvoked);
}
}
Run Code Online (Sandbox Code Playgroud)
该测试按原样通过,但是如果我将@Transactional注释添加到测试类中,它将失败:
@Transactional
@TransactionConfiguration(defaultRollback=true)
public class MyIntegrationTest extends AbstractIntegrationTest
Run Code Online (Sandbox Code Playgroud)
为什么配置测试@Transactional会影响JPA回调方法?
编辑
DAO只是一个Spring Data存储库,因此没有逻辑:
public interface BookDAO extends
JpaRepository<Book, Long>,
QueryDslPredicateExecutor<Book> {}
Run Code Online (Sandbox Code Playgroud)
事务管理器还具有标准配置:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> …Run Code Online (Sandbox Code Playgroud) 我最近在Macbook Pro上升级到了Java7.我下载了JDK(不是JRE).
» javac version
javac 1.7.0_17
» echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)
但是,当尝试运行构建时,其中一个maven编译器插件失败,声称我已经安装了JRE:
» mvn install
[ERROR] execute error
org.apache.maven.plugin.MojoExecutionException: You need to run build with JDK
or have tools.jar on the classpath.
If this occures during eclipse build make sure you run eclipse under JDK as well
at com.mysema.maven.apt.AbstractProcessorMojo.execute(AbstractProcessorMojo.java:263)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为我显然安装了JDK.我MAVEN_OPTS不做任何有趣的事情:
» echo $MAVEN_OPTS
-Xmx512m
Run Code Online (Sandbox Code Playgroud)
试图调试,我检查了有问题的插件的来源,这是做以下事情:
try {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
if (compiler == null) {
throw new MojoExecutionException("You need to run build with …Run Code Online (Sandbox Code Playgroud) 是否可以在Ansible中将特定角色应用为sudo?
具体来说,这些是从ansible-galaxy获取的角色,因此源不在我的控制之内.
这个例子表明传递sudo:yes给角色应该有效,但我认为必须首先定义角色以期望参数.
更改日志的此部分建议sudo true可以在角色级别设置,但是,以下操作无效:
---
- remote_user: "vagrant"
tasks: []
hosts: "all"
roles:
- role: "mysql"
sudo: yes
Run Code Online (Sandbox Code Playgroud)
但是,在顶层应用sudo会使角色起作用:
---
- remote_user: "vagrant"
tasks: []
hosts: "all"
sudo: yes
roles:
- role: "mysql"
Run Code Online (Sandbox Code Playgroud)
注-我既试过sudo: true和sudo: yes,其结果是一样的.
java ×6
hibernate ×2
jpa ×2
ansible ×1
antlr ×1
apache-flex ×1
c# ×1
flex4 ×1
guava ×1
html ×1
http ×1
http-headers ×1
mono ×1
portability ×1
querydsl ×1
spring ×1
types ×1
unit-testing ×1
xamarin.ios ×1