ย้ายบล็อกไปที่ bact.cc แล้วนะครับ

พ.ร.บ.คอมพิวเตอร์
หยุด ร่างพ.ร.บ.คอมพิวเตอร์
พื้นที่เก็บข้อมูลออนไลน์ ฟรี 2GB จาก Dropbox (sync กับ Windows, Linux, Mac, iPhone, Android ฯลฯ ได้)

2007-01-10

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: ,

2 comments:

PPhetra said...

มีอีกวิธีก็คือ
ใส่ 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' ว่า

bact' said...

มีคนแนะนำแบบนี้ในเมลกลุ่มเหมือนกัน
แต่แบบนี้เรียกว่า ซุกใต้พรม ป่ะ ? :{
พูดถึงว่าตอนรันมันคงไม่มีปัญหาหรอก เพราะเราคนเขียนรู้อยู่แล้วว่ามันจะเป็นอะไร
แต่จาวามัน strong-typed

... เอ๊ะ นี่มันยังไงกัน ถ้าไม่จำเป็นก็ไม่ต้องทำสิ
ทำไมต้องให้ภาษามาบังคับ!

เอาไงดี

เค้าคงคิดถึงเรื่อง เวลาคนอื่นมาดูโค้ดล่ะมั้ง
มันชัดเจนกว่า

แล้วแต่จะมอง

ข้อกำหนดมากชัดมาก ก็เรื่องมาก ยุ่งยาก
โดยธรรมชาติ

แล้วแต่จะเลือก เนอะ :)