Fix "uses unchecked or unsafe operations" for GATE’s FeatureMap

วันนี้นั่งไล่โค้ดตัวปลั๊กอิน GATE ทั้งวัน

กำลังเขียนปลั๊กอินเพื่อเอามาใช้กับโครงการที่กำลังทำอยู่ตอนนี้ที่ SIIT (เอ๊ะ ผมบอกรึยังนะ ว่าผมมาเป็นผู้ช่วยวิจัยอยู่นี่ ไว้ค่อยเล่าว่าทำอะไรละกัน ทีหลัง) ก็ใช้ GATE นี่แหละ

วันนี้พยายามแก้ warning ที่เจอมาตั้งแต่วันก่อน แต่ปล่อย ๆ ไปก่อน วันนี้ได้โอกาส ก็มาตามเก็บให้เรียบร้อย

โค้ดมันคล้าย ๆ นี้:


1: FeatureMap features = Factory.newFeatureMap();
2: features.put("key", object);

บรรทัดที่ 2 เนี่ย พอคอมไพล์ จะทำให้เกิด warning:


Note: MyJava.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

ไปเจอใน forum.java.sun.com เค้าบอกว่า มันเกิดเพราะ เราไม่ได้กำหนด parameter ให้กับตัว Map (เรื่อง generic)

ลองแก้ที่โค้ดตัวเอง ไม่สำเร็จ
ก็เลยต้องไปแก้โค้ดของ FeatureMap ของตัว GATE ซะ

ดังนี้:

ที่ไฟล์ gate/SimpleFeatureMap.java:

แก้
public interface SimpleFeatureMap extends Map
เป็น
public interface SimpleFeatureMap extends Map<Object, Object>

ที่ไฟล์ gate/util/SimpleMapImpl.java:

แก้
class SimpleMapImpl implements Map
เป็น
class SimpleMapImpl implements Map<Object, Object>

ลอง build GATE ดู ใช้ได้ build ผ่าน, ทดสอบรัน GATE โอเค

ลองคอมไพล์โปรแกรมตัวเอง (ที่เรียกใช้ FeatureMap) โอเค ไม่มี warning ละ เยี่ยม

ถ้าไม่มีซอร์สโค้ดแจกมา ให้ดู ให้แก้ คงทำงี้เองไม่ได้เนอะ ต้องรอเขาลูกเดียว ตั้งตา

เมลถาม(เอง)-ตอบ(เอง) เรื่องนี้เข้าเมลกลุ่ม ไปละ – -“

ไปประชุมเรื่อง YouMedia ก่อนนะ 😉

หมายเหตุ: นั่งเขียนที่ร้าน Cup B หยุดอยู่ที่ร้านนี้ เพราะหยุดดูข่าว iPhone ที่เค้าเปิดให้ดูหน้าร้าน (จอคอม) แล้วคนในร้านออกมาชวนคุย เราเลยนั่งทำงานอยู่ร้านนี้มันซะเลย หาที่นั่งทำงานเงียบ ๆ อยู่พอดี / Mac Cafe Mini @ Cup B

update: Ian Roberts หนึ่งในผู้ดูแล GATE ตอบรับแล้ว เดี๋ยวจะแก้โค้ดใน main GATE tree ให้ 🙂

technorati tags:
,

Published by

bact

bact' is a name

2 thoughts on “Fix "uses unchecked or unsafe operations" for GATE’s FeatureMap”

  1. มีอีกวิธีก็คือใส่ annotation SuยpressWarnings ครอบ method ที่เรียกใช้ FeatureMapอย่างตัวอย่างนี้@SuppressWarnings("unchecked")public static void main(String args[]) { Map map = new HashMap(); map.put("hi", new Integer(1));}ถ้าไม่ใส่ SuppressWarnings มันจะฟ้องเตือนอย่างที่ bact' ว่า

  2. มีคนแนะนำแบบนี้ในเมลกลุ่มเหมือนกันแต่แบบนี้เรียกว่า ซุกใต้พรม ป่ะ ? :{พูดถึงว่าตอนรันมันคงไม่มีปัญหาหรอก เพราะเราคนเขียนรู้อยู่แล้วว่ามันจะเป็นอะไรแต่จาวามัน strong-typed… เอ๊ะ นี่มันยังไงกัน ถ้าไม่จำเป็นก็ไม่ต้องทำสิทำไมต้องให้ภาษามาบังคับ!เอาไงดีเค้าคงคิดถึงเรื่อง เวลาคนอื่นมาดูโค้ดล่ะมั้งมันชัดเจนกว่าแล้วแต่จะมองข้อกำหนดมากชัดมาก ก็เรื่องมาก ยุ่งยากโดยธรรมชาติแล้วแต่จะเลือก เนอะ 🙂

Leave a Reply