小编Joh*_*ith的帖子

Java兼容性的公共字段

我发现最近对Kotlin作为一种语言的兴趣,因为我们开发的平台是基于Java 6的,因此缺乏近年来给Java带来的任何语法糖.

只有一件事使得在开发中不可能使用Kotlin而不是Java,也就是说,我们开发的平台在内部使用一些反射并要求成员公开.否则它将不起作用.

因此,从Kotlin文件生成的字节码实际上产生了公共getter和setter,这些字段本身仍然是私有的.

有没有办法克服这个问题,所以我得到了真正的公共领域?

我知道需要公共领域的设计失败,但系统对我们来说是一个黑盒子,我们不能改变它必须这样的事实.

field public member kotlin

14
推荐指数
1
解决办法
1164
查看次数

f:带参数的selectOneMenu

我有一组(用户)组和一个表格,我显示这些组(和用户).每个组表头包括f:selectOneMenu允许设置组范围值的a.为了这个例子,让它是一个int值列表(0,5,10,15,20).下面的简短版本的东西

的POJO:

public class User {
    private int    id;
    private String name;
    // .. getter, setter, equals, hashCode
}  

public class Group {
    private int    id;
    private String name;
    // .. getter, setter, equals, hashCode
}
Run Code Online (Sandbox Code Playgroud)

豆:

@ManagedBean(name = "oneSelectController")
@ViewScoped
public class OneSelectController implements Serializable {

    private List<User>                users;
    private List<Group>               groups;
    private List<Integer>             values;
    private Map<Group, List<User>>    usersToGroup;
    private Map<Group, List<Integer>> valuesToGroup;

    public OneSelectController() {

        log.info("New " + this.getClass().getSimpleName() + " ...");

        users = new ArrayList<>(4); …
Run Code Online (Sandbox Code Playgroud)

jsf

11
推荐指数
1
解决办法
405
查看次数

Eclipse/Idea忽略了Maven Java版本配置

我有:

<build>
  <pluginManagement>
     <plugins>
        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <version>3.1</version>
           <configuration>
              <source>1.6</source>
              <target>1.6</target>
           </configuration>
        </plugin>
     </plugins>
  </pluginManagement>
</build>
Run Code Online (Sandbox Code Playgroud)

然而我宣布:

public enum DirectoryWatchService {

    INSTANCE;

    private java.util.Optional<String> test;
    private java.nio.file.Files files;
}
Run Code Online (Sandbox Code Playgroud)

Eclipse没有打扰.IntelliJ也不是.即使是Maven也不会打扰.我甚至可以做一个mvn清洁包.在没有任何警告的情况下构建糟糕的东西.

java eclipse intellij-idea maven maven-compiler-plugin

8
推荐指数
1
解决办法
2298
查看次数

对于超类型的直接子类型,不允许进行投影

我有一个像下面这样的抽象类:

abstract class AbstractSync<out C : Configuration<*>> : ISync {
    internal abstract val configuration: C
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想要另一个继承自此的抽象类:

abstract class CascadedSync : AbstractSync {}
Run Code Online (Sandbox Code Playgroud)

CascadedSync类不应该修改泛型参数C,实际上它应该只实现一个ISync方法而不是其他方法.

我正在尝试不同的语法来实现这个看似简单的任务.在Java中,这看起来像这样:

abstract class CascadedSync extends AbstractSync {    
}
Run Code Online (Sandbox Code Playgroud)

在IntelliJ的帮助下将其翻译成Kotlin会产生以下结果:

abstract class CascadedSync : AbstractSync<*>()
Run Code Online (Sandbox Code Playgroud)

但同时给出以下错误:

对于超类型的直接子类型,不允许进行投影

什么是正确的语法?

generics kotlin

5
推荐指数
1
解决办法
1403
查看次数

多个线程在单个流中工作

我想知道以下是否有效:

class SomeCalc {

    AtomicLong   someResultA;
    AtomicDouble someResultB;

    public SomeCalc(List<Something> someList) {

        final Stream<Something> someStream = someList.stream();

        new Thread(() -> {
            long result = someStream.mapToLong(something -> something.getSomeLong()).sum();
            someResultA.set(result);
        }).start();

        new Thread(() -> {
            double result = someStream.mapToDouble(something -> (double) something.getSomeLong() / something.getAnotherLong()).sum();
            someResultB.set(result);
        }).start();
    }
}
Run Code Online (Sandbox Code Playgroud)

只要结果如本例中的原子那样,这会很好吗?或者在此过程中是否会有任何ConcurrentAccessModification例外情况或其他问题会出错?

java concurrency multithreading java-8 java-stream

3
推荐指数
1
解决办法
83
查看次数

Zoho API:获取发出请求的用户

我看到 Zoho API 为我们提供了获取各种用户信息的选项,但我找不到任何方法来获取有关当前发出请求的用户的信息。

OAuth2 安全 API 通常提供这样的端点,就像GoogleTwitter一样。

在他们的文档中有一些看起来像这样的东西:

https://www.zohoapis.com/crm/v2/users?type= CurrentUser

但随后他们的解释让所有希望破灭了: CurrentUser - To get the list of current CRM users

有什么已知的方法可以实现这一点吗?

zoho

2
推荐指数
1
解决办法
1427
查看次数

Kotlin:超级构造函数中所做的更改将被覆盖

我无法理解Kotlin实际上在做什么:

我的单元测试看起来像这样:

@Test
fun testReadCursorRequest() {
    val xml = fromFile()
    val parser: ReadCursorRequestParser = ReadCursorRequestParser(xml)
    assertEquals(0, parser.status)
    assertEquals(134, parser.contacts!!.size)
}
Run Code Online (Sandbox Code Playgroud)

我的解析器看起来像这样

abstract class EnvelopeParser(val xml: String) {
    abstract fun parseResponse(response: Element)

    init {
        parseResponse(xmlFromString(xml))
    }

    // non-related stuff
}
Run Code Online (Sandbox Code Playgroud)

class ReadCursorRequestParser(xml: String) : EnvelopeParser(xml) {

    var contacts: List<AddressBookElementParser> = mutableListOf()     

    override fun parseResponse(response: Element) {
        // here some parsing stuff, fills the contacts-list
        println("size is: ${contacts.size}")
    }
}
Run Code Online (Sandbox Code Playgroud)

println说size is: 134,单元测试说:java.lang.AssertionError: Expected <134>, actual <0>.

为什么?

kotlin

-1
推荐指数
1
解决办法
81
查看次数