<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
    強呀,思路不錯
    主站蜘蛛池模板: 久久影院亚洲一区| 免费国产成人午夜私人影视| 亚洲精品美女久久久久99小说| 亚洲色欲色欲www在线播放| 国产精品美女午夜爽爽爽免费| 亚洲一区免费视频| 成年女人毛片免费观看97| 最新亚洲精品国偷自产在线| 成人无遮挡毛片免费看| 精品久久久久久久久亚洲偷窥女厕| 国产男女猛烈无遮档免费视频网站 | 亚洲日韩在线中文字幕综合| 国产免费看插插插视频| 一区二区三区免费高清视频| 亚洲人成中文字幕在线观看| 日本免费一区二区久久人人澡| 亚洲精品日韩中文字幕久久久| 在线观看的免费网站无遮挡| 456亚洲人成在线播放网站| 美女被免费视频网站a国产| 国产成人久久精品亚洲小说| 国产中文在线亚洲精品官网| 日本黄色动图免费在线观看| 亚洲激情校园春色| 国产又粗又猛又爽又黄的免费视频 | 免费可以在线看A∨网站| 亚洲国产精品自在自线观看| 亚洲国产成人久久笫一页| 无码午夜成人1000部免费视频| 亚洲最大天堂无码精品区| 少妇亚洲免费精品| 一区二区三区四区免费视频| 日韩亚洲国产综合高清| 亚洲综合亚洲综合网成人| 免费国产黄网站在线观看| 亚洲国产午夜精品理论片在线播放| 伊人久久综在合线亚洲91 | 最近最好的中文字幕2019免费| 永久免费精品影视网站| 久久丫精品国产亚洲av| 性做久久久久免费观看|