2013-06-19 3 views
0

В java вы можете использовать отражение, чтобы получить целое число, представляющее все модификаторы в классе. Например:Сравнение модификаторов в Java

public final class Foo{} 
Foo.getClass().getModifiers();//returns 17 because public=1 and final=16 

Мой вопрос: какой лучший способ сравнить модификаторы двух классов? Допустим, у нас есть еще один класс:

private class Bar{} 
Bar.getClass().getModifiers();//returns 2 because private=2 

Теперь простой способ будет иметь тонну МФС говорят modifier.isAbstract, modifier.isPublic и т.д., но есть уборщик способ сделать это?

Редактировать: В конце концов я хочу два списка. Один говорит, что у Foo этот бар нет, а другой говорит, что у Бар есть, что у Foo нет. Поэтому в данном конкретном случае я хочу:

FooHasBarDoesnt: public, final 
BarHasFooDoesnt: private 

ответ

2

Как насчет метода Modifier.toString()?

Возврат строки, описывающей флаги модификатора доступа в указанном модификаторе.

например.

List<String> modNames = Arrays.asList(Modifier.toString(mods).split("\\s")); 

Этот список выглядит так: [public, final].

+0

Полностью забыл о 'toString()'. Вы правы, это именно то, что я ищу. –

1

Поскольку это int с флагами, вы можете сравнить их по битовым операциям.

int common = flags1 & flags2; 
int only1 = flags1^common; 
int only2 = flags2^common; 

Тогда вы можете запросить only1 и only2 по Modifier методами.

+1

Проблема в том, что я до сих пор не знаю, что именно представляют собой модификаторы, и вам придется вызывать все функции 'Modifier.isWhatever'. Я думаю, думал, что я просто бьюсь вокруг куста, я не думаю, что есть способ обойти это. –

Смежные вопросы