Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JRuby中实现接口和初始化java之类的对象?_Java_Ruby_Interface_Jruby - Fatal编程技术网

如何在JRuby中实现接口和初始化java之类的对象?

如何在JRuby中实现接口和初始化java之类的对象?,java,ruby,interface,jruby,Java,Ruby,Interface,Jruby,我不知道如何用JRuby中的JAVA类初始化接口对象 在下面的代码中,OAuthService是接口,ServiceBuilder是类 爪哇语: OAuthService service = new ServiceBuilder() System.out.println(">>>>>>>" + service.getClass()); Output >> class org.scribe.oauth.OAuth20ServiceImpl 但

我不知道如何用JRuby中的JAVA类初始化接口对象

在下面的代码中,OAuthService是接口,ServiceBuilder是类

爪哇语:

OAuthService service = new ServiceBuilder()
System.out.println(">>>>>>>" + service.getClass());
Output >> class org.scribe.oauth.OAuth20ServiceImpl
但是在JRuby中,我不知道在哪里编写OAuthService接口来初始化对象

JRuby::

service = ServiceBuilder.new()
puts service.java_class
Output >> class org.scribe.builder.ServiceBuilder
当我在JAVA中执行时,下面的代码执行得非常好

      OAuthService service = ServiceBuilder.new()
                                  .provider(FacebookApi.class)
                                  .apiKey(apiKey)
                                  .apiSecret(apiSecret)
                                  .callback("http://localhost:3000/oauth_callback/")
                                  .build()
但在Ruby中,它给出了错误

错误::

irb(main):015:0> service = ServiceBuilder.new()
                                  .provider(FacebookApi.class)
                                  .apiKey(apiKey)
                                  .apiSecret(apiSecret)
                                  .callback("http://localhost:3000/oauth_callback/")
                                  .build()

NoMethodError: undefined method `createService' for Class:Class
    from org/jruby/gen/InterfaceImpl1679303904.gen:13:in `createService'
    from (irb):15:in `evaluate'
    from org/jruby/RubyKernel.java:1066:in `eval'
    from org/jruby/RubyKernel.java:1409:in `loop'
    from org/jruby/RubyKernel.java:1174:in `catch'
    from org/jruby/RubyKernel.java:1174:in `catch'
    from /home/krunal/.rvm/gems/jruby-1.7.3@integration_hub/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
    from /home/krunal/.rvm/gems/jruby-1.7.3@integration_hub/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
    from /home/krunal/.rvm/gems/jruby-1.7.3@integration_hub/gems/railties-3.2.13/lib/rails/commands.rb:41:in `(root)'
    from org/jruby/RubyKernel.java:1027:in `require'
    from script/rails:6:in `(root)'
irb(main):016:0> 


我非常确定您给出的java示例没有打印出
类org.scribe.oauth.OAuth20ServiceImpl
。原因是java语句
newServiceBuilder()
必须返回ServiceBuilder的实例

如果您从提供的链接复制了代码,那么生成输出的java代码实际上是

 OAuthService service = new ServiceBuilder()
                              .provider(FacebookApi.class)
                              .apiKey(apiKey)
                              .apiSecret(apiSecret)
                              .callback("http://www.example.com/oauth_callback/")
                              .build();
 System.out.println(">>>>>>>" + service.getClass());
现在应该很清楚为什么ruby代码会打印出不同的东西,ruby代码应该是

 service = ServiceBuilder.new().provider(FacebookApi.class)
                               .apiKey(apiKey)
                               .apiSecret(apiSecret)
                               .callback("http://www.example.com/oauth_callback/")
                               .build()
 puts service.java_class

我认为您的问题是您需要使用
java\u class
调用提供商:

service = ServiceBuilder.new().provider(FacebookApi.java_class)
                              .api_key(api_key)
                              .api_secret(api_secret)
                              .callback("http://localhost:3000/oauth_callback/")
                              .build()
还有一些关于如何在JRuby中正确引用
java.lang.Class
对象的详细信息

尽管如此,我认为这将解决你的问题,但也许有一个更简单的方法我们可以做到这一点

看起来您正在尝试在这里创建oauth消费者。出于好奇,为什么不使用Ruby oauth2 gem,它与JRuby完美配合

您可以在这里了解更多信息,但我认为这对您来说会容易得多:

或者对于脸谱网来说,尤其考虑使用考拉:


用Ruby在Java中实现这一点而不是利用Ruby库实现这一点的基本原理是什么?

为什么它不起作用?这对Java来说非常有效可能与服务是Java中的OAuthService有关?我已经尝试过这段代码。但当我试图访问构建方法时,它会返回错误。我认为内置的方法调用了一些属于OAuthService接口的方法,这导致了这个问题。如果您需要帮助,请发布您使用的实际代码以及您遇到的错误。细节越多越好。您发布的问题没有说明任何错误,并且在我的回答中没有包含代码。您确定代码产生了错误,我没有看到调用createService方法。build()方法本身调用createService方法。您得到的错误是jruby在build方法内找不到createService方法,无法获取未定义的方法异常
@graph = Koala::Facebook::API.new(oauth_access_token)

profile = @graph.get_object("me")
friends = @graph.get_connections("me", "friends")
@graph.put_connections("me", "feed", :message => "I am writing on my wall!")