<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
    強呀,思路不錯
    主站蜘蛛池模板: 四虎一区二区成人免费影院网址| 亚洲中文久久精品无码| 亚洲最大福利视频网站| 免费萌白酱国产一区二区三区| 高清在线亚洲精品国产二区| 国产成人高清亚洲一区91| 国产免费无遮挡精品视频| 免费精品国产自产拍在线观看 | 久久99免费视频| 久久亚洲国产视频| 美丽姑娘免费观看在线观看中文版| 最刺激黄a大片免费网站| 毛片免费vip会员在线看| 中文日韩亚洲欧美制服| 国产精品二区三区免费播放心| 看全免费的一级毛片| 爱情岛论坛网亚洲品质自拍| 日本道免费精品一区二区| 亚洲福利一区二区| 精品久久久久久久免费加勒比| 老司机福利在线免费观看| 亚洲免费观看视频| 在线观看成人免费视频不卡| 亚洲av无码无线在线观看| 亚洲欧洲日产国码一级毛片| 日本视频免费高清一本18| 亚洲一区二区三区久久| 亚洲av午夜成人片精品电影| 成人自慰女黄网站免费大全| 亚洲成人网在线播放| 免费va在线观看| 免费av一区二区三区| 亚洲综合色婷婷在线观看| 亚洲福利精品一区二区三区| 无码人妻丰满熟妇区免费| 亚洲另类无码一区二区三区| 亚洲伊人色欲综合网| 免费三级毛片电影片| 97在线视频免费公开视频| 又长又大又粗又硬3p免费视频| 久久精品国产亚洲Aⅴ香蕉|