<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
    強呀,思路不錯
    主站蜘蛛池模板: 33333在线亚洲| 97se亚洲综合在线| 婷婷国产偷v国产偷v亚洲| 噼里啪啦电影在线观看免费高清 | 亚洲国产精品不卡毛片a在线| 亚洲综合色一区二区三区| 69成人免费视频| 亚洲AV男人的天堂在线观看| 永久免费毛片在线播放| 成人亚洲国产va天堂| 日本久久久免费高清| 边摸边吃奶边做爽免费视频网站| 波多野结衣免费视频观看 | 亚洲尹人香蕉网在线视颅| 91成人在线免费观看| 亚洲国产品综合人成综合网站| 成人奭片免费观看| 羞羞网站免费观看| 亚洲自偷自偷在线制服 | 老司机午夜精品视频在线观看免费 | 99久久国产亚洲综合精品| 国产精品酒店视频免费看| 老司机午夜免费视频| 中文字幕在线亚洲精品 | 色妞www精品视频免费看| 亚洲午夜精品第一区二区8050| 最近免费中文字幕中文高清| 亚洲图片在线观看| 毛片在线免费视频| 一级毛片免费在线播放| 香蕉视频在线观看亚洲| 一二三四免费观看在线视频中文版 | 亚洲国产精品嫩草影院| 亚洲一区二区视频在线观看 | 在线视频亚洲一区| 国产亚洲精品影视在线产品| 99热在线观看免费| 成人婷婷网色偷偷亚洲男人的天堂 | 免费国产人做人视频在线观看| 91免费在线视频| 亚洲中文字幕无码久久2020|