Skip to content

۳. مدیریت متدهای Overload شده (چندریختی) ​

یکی از رایج‌ترین خطاهای فریدا زمانی رخ می‌دهد که یک کلاس چند متد با نام یکسان اما ورودی‌های متفاوت داشته باشد. در این حالت باید از .overload(...) استفاده کنید تا مشخص کنید دقیقا کدام متد مد نظر شماست.

سناریو: هوک کردن متد با امضاهای مختلف ​

کد جاوا:

java
package com.example.bank

public class Transaction {
    /* متد اول: انتقال با مبلغ صحیح */    
    public void transfer(int amount) { ... }

    /* متد دوم: انتقال با مبلغ اعشاری و توضیحات */    
    public void transfer(String desc, double amount) { ... }
}

کد فریدا:

javascript
Java.perform(function () {
    var Transaction = Java.use("com.example.bank.Transaction")

    /* هوک کردن متد اول (int) */    
    Transaction.transfer.overload('int').implementation = function (amount) {
        console.log("[*] Transfer (int) called with: " + amount)
        this.transfer(amount)
    }

    /* هوک کردن متد دوم (String, double) */    
    Transaction.transfer.overload('java.lang.String', 'double').implementation = function (desc, amount) {
        console.log("[*] Transfer (desc, double) called.")
        /* تغییر مبلغ به صفر! */        
        this.transfer(desc, 0.0)
    }
})

لیست کامل تایپ‌ها

اگر نمی‌دانید آرگومان‌ها چه تایپی دارند، اسکریپت را بدون overload اجرا کنید. فریدا در کنسول خطا می‌دهد و تمام overloadهای موجود (امضای صحیح) را به شما پیشنهاد می‌دهد که می‌توانید کپی کنید.