首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >J2ObjC JavaLangTreeSet<String>不可能吗?

J2ObjC JavaLangTreeSet<String>不可能吗?
EN

Stack Overflow用户
提问于 2017-07-21 03:40:16
回答 3查看 48关注 0票数 0

我正在使用J2ObjC cocoapod包v0.9.6.1 (当前的最新版本)在objc中创建一个。

代码语言:javascript
复制
#include <java/util/TreeSet.h>

    id<JavaUtilSet> set = [[JavaUtilTreeSet alloc] init];
    for (NSString* setval in (NSArray*)values) {
        [set addWithId:setval];  // <== JavaLangClassCastException
    }

但是,这会引发异常:

代码语言:javascript
复制
JavaLangClassCastException: java.lang.String is not Comparable

指示NSString (j2objc中没有单独的JavaLangString )不会强制转换为Comparable对象。异常抛出。

代码语言:javascript
复制
JavaUtilTreeMap findWithId:withJavaUtilTreeMap_RelationEnum:

以前的0.9版本(8ee9dc12ad)在我上面的代码中运行得很好。如果我将JavaUtilTreeSet改为JavaUtilHashSet,那么它就能工作。

这是J2ObjC版本0.9.6.1中的一个bug,还是我在这里做错了什么?

EN

回答 3

Stack Overflow用户

发布于 2017-07-21 04:43:26

我认为您需要包括NSString+JavaString.h (它是一个j2objc公共头),因为它定义了添加可比较协议的NSString类别。否则,这些NSString对象就是NSStrings。:-)

票数 0
EN

Stack Overflow用户

发布于 2017-07-23 01:18:34

TreeSet可以工作,如本例所示:

代码语言:javascript
复制
import java.util.*;

class TreeSetTest {
  public static void main(String... args) {
    Set<String> set = new TreeSet<>();
    for (String setval : args) {
      set.add(setval);
    }
    System.out.println(set);
  }
}

$ j2objc TreeSetTest.java
$ j2objcc TreeSetTest.m
$ ./a.out TreeSetTest Tom Dick Harry
[Dick, Harry, Tom]

TreeSetTest.h和TreeSetTest.m中包含了很多头,因此我鼓励您翻译这个示例并查看生成的内容。您的代码不需要"java/io/PrintStream.h“和"java/lang/System.h”,因为这是为了支持System.out行,但是包含其他代码不会对您造成伤害,并且可能会解决您的问题。

票数 0
EN

Stack Overflow用户

发布于 2017-07-23 17:11:19

事实证明,Cocoapods的版本已经过时了2年,如果不是更多的话。最新的J2ObjC是v2.0.2,在切换到那个(非pod)版本之后,TreeSet再次工作。

所以我得出结论,这是那个特定(旧的)版本中的一个bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45228563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档