Создание метода, способного распознавать тип параметра и соответственно вызывать их общие методы

Я создал очень простую библиотеку https://github.com/ravinderpayal/FooterJS

. Она очень проста в использовании. После включения библиотеки просто позвоните в эту строку кода.

footer.init(document.getElementById("ID_OF_ELEMENT_CONTAINING_FOOTER"));

Нижние колонтитулы могут быть динамически изменены путем вызова функции выше с другим параметром / id.

footer.init(document.getElementById("ID_OF_ANOTHER_ELEMENT_CONTAINING_FOOTER"));

Примечание. - Вы не должны изменять или добавлять CSS. Библиотека динамична, что подразумевает, что даже если размер экрана будет изменен после загрузки страницы, он сбросит положение нижнего колонтитула. Я создал эту библиотеку, потому что CSS решает проблему некоторое время, но когда размер отображения значительно меняется, от рабочего стола до планшета или наоборот, они либо перекрывают содержимое, либо больше не остаются липкими.

Другое решение - это CSS Media Queries, но вы должны вручную писать разные стили CSS для разных размеров экранов, в то время как эта библиотека выполняет свою работу автоматически и поддерживается всеми базовыми браузерами, поддерживающими JavaScript.

Редактирование решения CSS:

@media only screen and (min-height: 768px) {/* or height/length of body content including footer*/
    /* For mobile phones: */
    #footer {
        width: 100%;
        position:fixed;
        bottom:0;
    }
}

Теперь, если высота отображения больше, чем длина вашего содержимого, мы создадим нижний колонтитул снизу, а если нет, он будет автоматически отображаться в самом конце дисплея, поскольку вам нужно прокрутить, чтобы просмотреть это .

И это кажется лучшим решением, чем JavaScript / library one.

2
задан Hydraxia 19 March 2019 в 11:02
поделиться

3 ответа

Да, вы можете использовать стратегию с использованием интерфейсов. Вы можете узнать это по instanceof

if (dog instanceof Dog) System.out.println("dog is an instanceof Dog");

Чтобы быть более точным в вашем вопросе, например:

public interface ISet {

    void set(int a, int b, int c);

}

public class Cube implements ISet {
    @Override
    public void set(int a, int b, int c) {

    }
}

public class Primitive implements ISet {
    @Override
    public void set(int a, int b, int c) {

    }
}


public class Tile implements ISet {
    @Override
    public void set(int a, int b, int c) {

    }
}

public static void main(String[] args) {
    ISet set = new Cube(); //just an example. it can be given
    if (set instanceof Cube) {
        System.out.println("instanceof Cube");
    }
}

public class A {
    public void set(ISet set) {
        set.set(0 ,0, 0);
    }
}
0
ответ дан lolo 19 March 2019 в 11:02
поделиться

Да, Наследование. Иметь базовый класс с методом set. Сделайте метод set виртуальным и переопределите его в классах Tile Primitive и Cube. Затем Simple вызовите его следующим образом:

void monster(BaseClass tile, int a, int b, int c)
{
   tile.set(a,b,c)
}

Эта функция примет любой класс, унаследованный от BaseClass, и вызовет его перезаписанный метод соответственно.

0
ответ дан Kyle Michiels 19 March 2019 в 11:02
поделиться

Создайте интерфейс Shape:

interface Shape {
    void set(int a, int b, int c);
}

class Tile implements Shape {

    @Override
    public void set(int a, int b, int c) {
    }

}

class Cube implements Shape {

    @Override
    public void set(int a, int b, int c) {
    }

}

И теперь вы можете назвать его так:

class Test {

   public static void acceptGenericType(Shape shape) {
      shape.set(shape.getA(), shape.getB(), shape.getC());
   }

   public static void main(String[] args) {
      Shape tile = new Tile();
      acceptGenericType(tile); // calls Tile's set()
   }
}

Таким образом, вы вызываете только set() из Особый случай.

0
ответ дан Nicholas K 19 March 2019 в 11:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: