<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    JRuby中使用接口和抽象類

    Posted on 2008-02-15 14:34 dennis 閱讀(1517) 評論(1)  編輯  收藏 所屬分類: 動態語言java
        要在JRuby中實現java接口,接口include進來,實現接口方法即可,例如實現java.lang.Runnable接口做線程處理:
    require 'java'
    include_class 'java.lang.Runnable'
    class
     TestRunnable
        include Runnable
        
    def initialize(name)
          @name
    =name     
        end
        
    def run
          puts 
    "hello,"+@name
        end
    end

        要在JRuby中繼承抽象類,實現其中的抽象方法,方法稍微麻煩點,需要cglib,到這里下載cglib-nodep-2.1_3.jar,寫個通用庫abstract_class.rb方便處理:

    load 'cglib-nodep-2.1_3.jar'

    class Object
      include Java
      include_class 
    "net.sf.cglib.proxy.Enhancer"
      include_class 
    "net.sf.cglib.proxy.NoOp"
      
      
    class <<self
        
    def method_missing(mname, *args, &block)
          unless mname 
    == :abstract_impl and respond_to?(:java_class) and JavaLang::reflect::Modifier.isAbstract(JavaLang::Class.for_name(java_class.name).modifiers)
            super
          
    else
            generate_abstract_impl(args, 
    &block)
          end
        end
        
        private 
        
        
    def generate_abstract_impl(args, &block)
          factory 
    = Enhancer.new
          factory.setSuperclass(java_class)
          factory.setInterfaces(java_class.interfaces.to_java(
    "java.lang.Class"))
          factory.setCallback(NoOp::INSTANCE)
          
          object_args 
    = args.map { |arg| Java.ruby_to_java(arg) }
          class_arguments 
    = object_args.map {|arg| arg.java_class}.to_java("java.lang.Class")
          generated_class 
    = factory.create(class_arguments, object_args.to_java("java.lang.Object"))
          
          ruby_class 
    = Class.new(generated_class.class)
          ruby_class.class_eval(
    &block)
          
          
    return ruby_class.new(*args)
        end
      end
      
    end

        使用的話,require一下abstract_class,例如我們要繼承java.util.TimerTask,實現其中的run方法:
    $:.unshift File.join(File.dirname(__FILE__),'.')
    require 
    'java'
    require 
    'abstract_class'
    import java.util.TimerTask
    import java.util.Timer
    timer_task 
    = TimerTask.abstract_impl do
      
    def run
        puts 
    "timer task"
      end
    end

    Timer.new.schedule(timer_task, 
    10001000)




    評論

    # re: JRuby中使用接口和抽象類  回復  更多評論   

    2008-02-17 12:26 by 51ytw
    強呀,思路不錯
    主站蜘蛛池模板: 免费鲁丝片一级在线观看| 成人亚洲网站www在线观看| 亚洲综合色婷婷在线观看| 国产麻豆免费观看91| 中文字幕乱码免费看电影| 亚洲日韩乱码中文无码蜜桃 | 免费毛片在线看不用播放器| 亚洲精品熟女国产| 亚洲av麻豆aⅴ无码电影| 久久国产乱子伦免费精品| 亚洲成a∧人片在线观看无码| 久久夜色精品国产亚洲| 成人免费福利电影| 日韩免费观看一区| 亚洲6080yy久久无码产自国产| 亚洲国产人成在线观看69网站| 国产成人精品免费视频大全五级| 免费黄网站在线观看| 黄页网址在线免费观看| 亚洲一级毛片免费在线观看| 国产成人综合亚洲AV第一页 | 污网站免费在线观看| 亚洲午夜精品一区二区公牛电影院 | 三年片在线观看免费大全电影| 亚洲AV无码国产一区二区三区| 亚洲国产一区二区三区青草影视| 免费国产成人午夜电影| 国产免费一区二区三区| 两性色午夜免费视频| 校园亚洲春色另类小说合集| 亚洲欧洲精品一区二区三区| 在线日韩日本国产亚洲| 日本特黄特色免费大片| 99爱在线精品免费观看| 国产免费AV片在线观看| 色老头综合免费视频| 亚洲av无码一区二区三区四区| 亚洲女人影院想要爱| 亚洲激情在线观看| 亚洲AV日韩AV天堂一区二区三区 | 在线观看永久免费|