Ваши активы упакованы в ваш apk, поэтому вы не можете ссылаться на них напрямую во время выполнения, как в приведенном вами образце кода. У вас есть 2 варианта:
Context.getAssets().open('cacert.cert')
Когда вы делаете свой метод универсальным, это означает, что вызывающая сторона имеет контроль над параметром типа. Абонент всегда может предоставить все, что встречает любые границы, и у вас нет границ. Вызывающая сторона может предоставить Integer
, Object
или Foo
, и этот метод должен возвращать экземпляр этого типа.
Однако, согласно компилятору, это не имеет ничего общего с условиями в логике вашего метода. Он не может гарантировать, что то, что вы возвращаете, совпадает с параметром типа, что и пытается сказать компилятор.
Ваш метод не может быть здесь общим. Если все ваши SomethingX
классы наследуются от базового класса или интерфейса, то ваш метод должен вернуть этот тип, иначе он должен быть Object
. Если вам нужно вызвать один конкретный метод, который есть у всех ваших SomethingX
классов, извлеките новый интерфейс и попросите ваш метод вернуть этот тип.
Если у вас нет общего интерфейса, но вы должны вызывать определенные методы для возвращаемого объекта, затем перенесите свою условную логику за пределы этого метода в вызывающий код или выполните вызов метода для объекта перед его возвратом. [ 1110]
private Object get() throws Exception {
Object m;
if (/*some condition*/) {
Something1 s1 = new Something1();
s1.s1Method();
m = s1;
}
else if (/*some condition*/) {
Something2 s2 = new Something2();
s2.s2Method();
m = s2;
}
else {
Something3 s3 = new Something3();
s3.s3Method();
m = s3;
}
return m;
}