小编Mar*_*itt的帖子

为了最大限度地提高Mono代码的可移植性,我应该注意哪些约束?

我有兴趣使用Mono编写一些跨平台代码,以期针对移动iOS和Android运行时.

我已经仔细阅读过Mono和MonoTouch网站,但是没有看到任何特别建议不使用的方法,或Mono钩子应该避免.然而,这看起来有点太好了.

我应该注意进入这个项目有哪些限制,以确保代码的最大可移植性?

c# mono portability xamarin.ios xamarin.android

7
推荐指数
1
解决办法
507
查看次数

在Java中使用重载方法键入顺序

给出了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 )被调用了.

我原本期望调用最接近的匹配合约的重载,而不是最抽象的(这是我发现的)

有人能解释为什么吗?

java types

6
推荐指数
1
解决办法
1598
查看次数

了解ANTLR中的树

我正在尝试将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)

java antlr

6
推荐指数
1
解决办法
2895
查看次数

Flex字体渲染差异从4.1到4.5

我目前正在将应用程序从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中,字体看起来略微压扁.

造成这种情况的原因是什么,我们如何解决?

apache-flex flex4

6
推荐指数
1
解决办法
1622
查看次数

Http 304&Cache-Control:无缓存

我从网络服务器的一些调用中看到以下响应:

初次通话:

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指令,浏览器似乎已缓存了响应.为什么?

html http http-headers

6
推荐指数
1
解决办法
5479
查看次数

适当的方式来继承Guava的ImmutableSet

我有一个班级

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方法委托给它.然而,这似乎有点矫枉过正.

还有另一种方法可以在这里实现非泛型子类吗?

java guava

6
推荐指数
1
解决办法
363
查看次数

使用带有多对多映射的QueryDSL JPA编写查询

我在使用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)

java hibernate jpa querydsl

6
推荐指数
1
解决办法
7300
查看次数

单元测试中的@Transactional阻止调用@PostLoad

我有以下测试:

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)

java spring unit-testing hibernate jpa

6
推荐指数
1
解决办法
683
查看次数

升级到Java7,Missing Tools.jar和错误的类版本后构建失败

我最近在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)

java

6
推荐指数
2
解决办法
3万
查看次数

在sudo用户下应用角色

是否可以在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: truesudo: yes,其结果是一样的.

ansible

6
推荐指数
1
解决办法
4323
查看次数